与Libgdx的圆和多边形碰撞

在Libgdx中有一种方法可以validation多边形和圆形之间的碰撞吗?

我看到了Intersector类,但只发现了Circle和Rectangle的碰撞测试。 那么其他任何多边形呢?

如果我需要手动完成,使用Libgdx最好的方法是什么?

所以,我设法在Circle和Polygon之间创建了一个碰撞测试方法。 至少,它对我有用。

这是代码:

 public boolean overlaps(Polygon polygon, Circle circle) { float []vertices=polygon.getTransformedVertices(); Vector2 center=new Vector2(circle.x, circle.y); float squareRadius=circle.radius*circle.radius; for (int i=0;i 

可悲的是,我没有足够的声誉来发表评论,所以我将其作为另一个答案添加……

克里斯蒂亚诺的优秀答案适用于检查圆圈与多边形的一个线段重叠,但是它不会检查圆圈完全包含在多边形内部的更不寻常的情况,如果一个小的快速移动的圆圈相撞可能会发生这种情况有一个大的多边形。

我在下面通过一些小改动来解释克里斯蒂亚诺的代码来解决这个问题……

 public static boolean overlaps(Polygon polygon, Circle circle) { float []vertices=polygon.getTransformedVertices(); Vector2 center=new Vector2(circle.x, circle.y); float squareRadius=circle.radius*circle.radius; for (int i=0;i 

…并且跟进Phil Anderson的优秀答案,这是我的版本,它可以避免每次检查都创建新的Vector2,而是重复使用Vector2的静态实例。

 public class PolygonUtil { static final Vector2 center = new Vector2(); static final Vector2 vec1 = new Vector2(); static final Vector2 vec2 = new Vector2(); public static boolean overlaps(Polygon polygon, Circle circle) { float []vertices=polygon.getTransformedVertices(); center.set(circle.x, circle.y); float squareRadius=circle.radius*circle.radius; for (int i=0;i 

}