【问题标题】:Collision Polygon and Circle - Lingdx碰撞多边形和圆 - Libgdx
【发布时间】:2015-02-14 12:27:03
【问题描述】:

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

谢谢

【问题讨论】:

标签: java libgdx


【解决方案1】:

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);

返回真。如果是,则表示您的多边形和圆相撞。

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

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

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

【讨论】:

  • 是的,但是我有一个问题,当我用多边形做时非常不精确,圆在段上没有停止,但当我用矩形做时,它是精确的。这是什么问题?
  • @PABLO 不知道。 Maybye,如果您显示代码,有人可以指出吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多