碰撞多边形和圆形--Libgdx

时间:2015-02-14 12:27:04

标签: java libgdx

我想检测多边形和圆形碰撞的时间。我想到的其他可能性是矩形,但它不可能,因为我想旋转矩形,那么解决方案是什么?

谢谢

1 个答案:

答案 0 :(得分:2)

LibGDX中有 Intersector 类,它应该可以满足您的需求。 libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html

使用 intersectSegmentCircle 方法。 它确实将Vector2变量作为参数,因此您必须使用Vector2来存储点的x和y坐标 - 圆心和多边形顶点。 还有Polygon和Circle类,您可以使用它们将坐标存储为Vector2。

无论如何,我们假设您已经有了由Vector2点集描述的圆和多边形:

Vector2 circleCenter, PolyVertex1, PolyVertex2, PolyVertex3, ..., PolyVertexN;

多边形顶点之间存在线段,如果这些线段中的任何一个与圆相交,则必须检查它们。因此,对于每对验证,请检查:

intersectSegmentCircle(PolyVertex1, PolyVertex2, circleCenter, radius^2);
intersectSegmentCircle(PolyVertex2, PolyVertex3, circleCenter, radius^2);
...
intersectSegmentCircle(PolyVertexN-1, PolyVertexN, circleCenter, radius^2);
intersectSegmentCircle(PolyVertexN, PolyVertex1), circleCenter, radius^2);

返回true。如果是,则表示您的多边形和圆圈合并。

在某些情况下(小圆和大多边形),多边形边和圆之间不可能有交点,整个圆可以在多边形内。然后你将不得不使用 isPointInPolygon()方法。它需要Array2的Vector2(多边形顶点)和Vector2(cirlce center)作为参数。 因此,将多边形顶点存储在数组中,并检查isPointInPolygon是否返回true。如果是,那么再次发生碰撞。

Array <Vector2> PolyVertices;
...
isPointInPolygon(PolyVertices,circleCenter);

不要复制和粘贴上面的代码,因为缺少初始化等而无法工作;)但我希望,想法很清楚。