collision-detection - 圆弧和线段碰撞检测

标签 collision-detection distance line-segment

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

圆弧未填充,因此只有圆的外边缘才算在内。

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

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

我只需要伪代码。虽然我可以通过将圆弧转换为两个没有厚度的圆弧和两端的两个圆来完成此操作,并使用传统算法,但这是时间敏感的。将其分解为基元并单独检查会重新检查/重新计算一些东西,我想避免任何不必要的计算。

最佳答案

我希望弧线是我认为的那样(英语不是我的语言)。我是这样做的。最后一个函数是解决问题的函数,前面的函数是实用程序。它工作正常。这个想法是计算圆和线之间的交点,并拒绝那些不在圆弧或线段上的交点。

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

代码是C++。我没有时间将它翻译回伪代码。希望对您有所帮助。

I hope an arc is what I think it is (English is not my language). Here is how I did it. The last function is the one that solves the problem and the previous ones are utilities. It works fine. The idea is to compute the intersections between the circle and the line and to reject those that do not lie on the arc or the line segment.

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

代码是C++。我没有时间将它翻译回伪代码。希望对您有所帮助。

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

2 周内可用!

关于collision-detection - 圆弧和线段碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13447653/

相关文章:

python碰撞检测解决循环依赖

xna - 圆和线段之间的碰撞处理

arrays - 二维数组中元素之间的距离

python - 使用 Numpy 求一组点的平均距离

java - 如何旋转由线段组成的形状

python - 我如何在我的障碍物或我的机器人周围添加一个安全区?

c# - XNA 中任意大小、定位和旋转的矩形的碰撞检测

web-services - 使用Webservices查找两个邮政编码之间的距离?

arrays - 对描述多边形的线段数组进行排序和分组

language-agnostic - 点与线段之间的最短距离