碰撞多边形和圆 - Libgdx
Collision Polygon and Circle - Lingdx
我想检测多边形和圆何时发生碰撞。我想到的其他可能性是矩形,但不可能因为我想旋转矩形,所以解决方案是什么?
谢谢
在 LibGDX 中有 Intersector class,它应该可以很好地满足您的需要。
libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html
使用intersectSegmentCircle方法。
它确实将 Vector2 变量作为参数,因此您必须使用 Vector2 来存储点的 x 和 y 坐标 - 圆心和多边形顶点。
还有 Polygon 和 Circle classes,您可以使用它们将坐标存储为 Vector2。
无论如何,假设您已经有了由一组 Vector2 点描述的圆和多边形:
Vector2 circleCenter, PolyVertex1, PolyVertex2, PolyVertex3, ..., PolyVertexN;
多边形顶点之间存在线段,您必须检查这些线段是否与圆相交。因此,对于每一对顶点,检查 if:
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);
returns 是的。如果是,说明你的多边形和圆相撞了。
在某些情况下(小圆和大多边形),多边形边和圆之间可以没有交点,整个圆可以在多边形内部。然后你将不得不使用 isPointInPolygon() 方法。它以 Vector2(多边形顶点)和 Vector2(圆心)数组作为参数。
因此,将多边形顶点存储在数组中,并检查 isPointInPolygon returns 是否为真。如果是,那么又是碰撞。
Array <Vector2> PolyVertices;
...
isPointInPolygon(PolyVertices,circleCenter);
不要复制和粘贴上面的代码,因为缺少初始化等原因无法工作;)但我希望,思路很清楚。
我想检测多边形和圆何时发生碰撞。我想到的其他可能性是矩形,但不可能因为我想旋转矩形,所以解决方案是什么?
谢谢
在 LibGDX 中有 Intersector class,它应该可以很好地满足您的需要。 libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html
使用intersectSegmentCircle方法。 它确实将 Vector2 变量作为参数,因此您必须使用 Vector2 来存储点的 x 和 y 坐标 - 圆心和多边形顶点。 还有 Polygon 和 Circle classes,您可以使用它们将坐标存储为 Vector2。
无论如何,假设您已经有了由一组 Vector2 点描述的圆和多边形:
Vector2 circleCenter, PolyVertex1, PolyVertex2, PolyVertex3, ..., PolyVertexN;
多边形顶点之间存在线段,您必须检查这些线段是否与圆相交。因此,对于每一对顶点,检查 if:
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);
returns 是的。如果是,说明你的多边形和圆相撞了。
在某些情况下(小圆和大多边形),多边形边和圆之间可以没有交点,整个圆可以在多边形内部。然后你将不得不使用 isPointInPolygon() 方法。它以 Vector2(多边形顶点)和 Vector2(圆心)数组作为参数。 因此,将多边形顶点存储在数组中,并检查 isPointInPolygon returns 是否为真。如果是,那么又是碰撞。
Array <Vector2> PolyVertices;
...
isPointInPolygon(PolyVertices,circleCenter);
不要复制和粘贴上面的代码,因为缺少初始化等原因无法工作;)但我希望,思路很清楚。