当前位置: 首页 > 知识库问答 >
问题:

圆弧和线段碰撞检测

丰博
2023-03-14

如何检查线段与圆弧之间的距离?

圆弧是未填充的,所以只有圆的外缘是计数的一部分。

我想做冲突检测。基本上我有两个圆形物体。一个在直线上移动,另一个在圆弧上移动。物体有碰撞半径。

请注意,这不是精确的碰撞检测,因为我相信没有闭合形式的解决方案来进行以恒定速度移动的时间分析(有迭代解决方案)。

我只需要伪代码。虽然我可以通过将弧转换为两个没有厚度的弧,并在endpoint上转换两个圆,并使用传统算法来实现这一点,但这是时间敏感的。将其分解为原语并单独检查将重新检查/重新计算某些内容,我希望避免任何不必要的计算。

共有1个答案

公孙鸿才
2023-03-14

我希望弧线是我认为的那样(英语不是我的语言)。以下是我是如何做到的。最后一个函数是解决问题的函数,前面的函数是实用程序。它工作得很好。其思想是计算圆和直线之间的交点,并拒绝那些不在圆弧或线段上的交点。

注意:圆弧由圆心(xc, yc)、半径和两个角度定义。由于两个角度定义了两个圆弧(逆时针和顺时针),我假设圆弧从第一个角度到第二个角度是逆时针的。两个角度都在[0,2.PI[,所以如果圆弧穿过(xc R, yc),第一个角度必须大于第二个角度。

代码是C。我没有时间把它翻译回伪代码。我希望它有帮助。

我希望弧线是我认为的那样(英语不是我的语言)。以下是我是如何做到的。最后一个函数是解决问题的函数,前面的函数是实用程序。它工作得很好。其思想是计算圆和直线之间的交点,并拒绝那些不在圆弧或线段上的交点。

注意:圆弧由圆心(xc, yc)、半径和两个角度定义。由于两个角度定义了两个圆弧(逆时针和顺时针),我假设圆弧从第一个角度到第二个角度是逆时针的。两个角度都在[0,2.PI[,所以如果圆弧穿过(xc R, yc),第一个角度必须大于第二个角度。

代码是C。我没有时间把它翻译回伪代码。我希望它有帮助。

网址:http://www.fichiers.univ-metz.fr/depot/minich/SegmentArcIntersection.txt

可用2周!

 类似资料:
  • 那么,我如何实现圆弧线的冲突检测呢?我必须使用Box 2d碰撞,还是可以使用矩形之类的其他方法? 顺便说一句,我讨厌box2d,因为我不了解其中的大部分内容,所以如果有一个解决方案排除box2d的话,我会非常感激。 黄色的弧线继续在黑色的圆圈上旋转。我如何在这里实现碰撞检测? 请帮忙!谢谢!

  • 有没有数学方法可以求出两个圆圈碰撞所需要的时间?如果我能得到那个时间值,我就能把圆圈移动到那个时候的位置,然后在那个点上碰撞它们。 编辑:等速

  • 我想创造一个和乒乓球一样的游戏。我创建了一个沿着圆周移动的桨。注意桨是弧形的。我想知道我如何检测球和桨之间的碰撞。为了更好地理解这个:http://gyazo.com/7bac8acdf0faf66005015d496498ca33球将在圆圈内,当与桨碰撞时反射出去。提前感谢!

  • 我正在编写软件,扩展圆-矩形碰撞检测(交集),以包括对碰撞的响应。圆边和圆矩形是相当直接的。但一圈又一圈地把我难住了。 例如,在离散事件模拟中,让两个圆碰撞,一个红一个绿。我们可能会出现以下情况: 在它们碰撞后,我们可以立即: 这里的RIP和GIP是在前一个时钟滴答的圆圈的位置。在当前时钟滴答时,在RDP和GDP处检测到冲突。然而,当两个圆位于RCP和GCP时,碰撞发生在时钟滴答之间。在时钟滴答声

  • 我正在编写一个游戏,涉及碰撞的一个移动的圆,由用户控制,和一个移动的矩形,由计算机控制。 完整的代码可以在这里找到:游戏 我在圆和矩形之间的碰撞检测方面遇到了麻烦。当矩形是静态的,碰撞检测工作完美。当圆和矩形的边缘在任一边接触时,程序就会按照它应该的方式进行操作。 这是碰撞检测功能。 谢谢。

  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect