点在一个大的多边形里面

我刚刚开始使用pyBox2D,因为我已经知道python了,我想知道如果我有一个大的多边形500点,我将如何能够检查一个点是否在这个多边形内。 我试图制作一个有500个顶点的多边形,但是pyBox2D不允许这样做,因为最大顶点是16。

我想过把多边形分割成许多更小的多边形,但我不完全知道如何检查点是否在所有这些多边形内。 我是否需要创建一个物体并添加多边形夹具,或者我可以只使用b2PolygonShape,然后从形状中查询点?

我一直在使用python2D的github wiki编写我所有的代码,他们有一个关于点查询形状的部分,但我不知道如何在我的项目中实现这个。

Box2D的形状不适合这个,特别是因为顶点数的限制。 他们使用一个小的,固定大小的内部数组(在大多数实现中)。

幸运的是,如果您不需要Box2D的其他function来完成这个特定的多边形,还有其他的方法是非常平易近人的。

以下是一种方法:

def is_point_inside_polygon(poly, point): previous = poly[-1] hitcount = 0 for current in poly: if (previous.y != current.y && min(previous.y, current.y) <= point.y < max(previous.y, current.y)): lerp = (point.y - previous.y) / (current.y - previous.y) xIntersect = previous.x + lerp * (current.x - previous.x) if (point.x < xIntersect): ++hitcount previous = current hitcount = hitcount % 2 return hitcount != 0 

注意:我不太了解Python,所以可能有语法问题,或者是不存在的东西。 让我知道如果不清楚如何纠正我在那里犯的任何错误。

这种方法是基于以下事实:从testing点的任何方向上的无限射线将与奇数或偶数相交,并且该奇偶性告诉您该点是位于内部还是外部多边形。 在这里寻找这个方法的细节 。