Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 圆和多边形情况下的GJK算法_Algorithm_Collision - Fatal编程技术网

Algorithm 圆和多边形情况下的GJK算法

Algorithm 圆和多边形情况下的GJK算法,algorithm,collision,Algorithm,Collision,我想知道是否有可能修改GJK,这样我就可以用它来检测圆和n个多边形点之间的碰撞 我以前实现过多边形和多边形,并尝试修改支持函数(以获得圆的最远点),但显然,这会导致无限循环 这可能吗?我是否需要更改除支持功能以外的其他功能?(因为我没有看到任何) 这里是我用来得到圆中最远点的东西,顺便说一句 maxPointCircle = new Vector2(circle.center).add(new Vector2(direction).mul(circle.radius)); GJK算法实际上告诉

我想知道是否有可能修改GJK,这样我就可以用它来检测圆和n个多边形点之间的碰撞
我以前实现过多边形和多边形,并尝试修改支持函数(以获得圆的最远点),但显然,这会导致无限循环
这可能吗?我是否需要更改除支持功能以外的其他功能?(因为我没有看到任何)

这里是我用来得到圆中最远点的东西,顺便说一句

maxPointCircle = new Vector2(circle.center).add(new Vector2(direction).mul(circle.radius));

GJK算法实际上告诉您两个多边形之间的最小距离(当距离为0时,表示碰撞)。 因此,对于多边形和圆,可以使用GJK找到该多边形和圆的中心点之间的最小距离,然后将该距离与圆的半径进行比较。如果距离小于或等于半径,则为碰撞

算法如下所示:

collision(polygon1, circle):
  polygon2 = dummy polygon of only one point, which is the center of the circle
  distance = GJK(polygon1, polygon2)
  if distance <= circle.radius:
    return true
  else:
    return false
碰撞(多边形1,圆):
polygon2=只有一个点的虚拟多边形,该点是圆的中心
距离=GJK(多边形1,多边形2)

如果距离GJK算法实际上告诉您两个多边形之间的最小距离(当距离为0时,表示碰撞)。 因此,对于多边形和圆,可以使用GJK找到该多边形和圆的中心点之间的最小距离,然后将该距离与圆的半径进行比较。如果距离小于或等于半径,则为碰撞

算法如下所示:

collision(polygon1, circle):
  polygon2 = dummy polygon of only one point, which is the center of the circle
  distance = GJK(polygon1, polygon2)
  if distance <= circle.radius:
    return true
  else:
    return false
碰撞(多边形1,圆):
polygon2=只有一个点的虚拟多边形,该点是圆的中心
距离=GJK(多边形1,多边形2)
如果距离