计算圆弧和直线的交点

8
我想计算弧线与直线的交点。 我有直线和弧线的所有数据。
对于直线:起始点和终点。 对于弧线:起始/终止点,起始/终止角度,半径和中心点。
我在这里附上一张图片。 在下面的图像中,我画了一条弧线和一条直线,其中直线与弧线相交。
现在我想找到相交点。 请给我一些算法或想法,如果有任何可用代码也可以。

6
老实说!我在数学堆栈交换站上搜索了两个类似的问题,只用了几秒钟。 http://math.stackexchange.com/questions/228841/how-do-i-calculate-the-intersections-of-a-straight-line-and-a-circle 和 http://math.stackexchange.com/questions/1078578/how-to-find-coordinates-of-a-point-on-intersection-of-arc-and-line - Weather Vane
2
@WeatherVane:这两个链接中的解决方案都没有解决圆弧间隔问题,或者解决得不够好。 - user1196549
为什么这个问题被踩了?它在StackOverflow上和其他任何问题一样有效。 - dbeachy1
你确定你不是指线段而不是直线吗?一条直线没有起点和终点。 - Peter Schorn
1个回答

4

让我们定义一条弧线和一条直线:

弧线:

  • xa=X坐标
  • ya=Y坐标
  • a1=起始角度(较小的角度)
  • a2=结束角度(较大的角度)
  • r=半径

直线:

  • x1=第一个X坐标
  • x2=第二个X坐标
  • y1=第一个Y坐标
  • y1=第二个Y坐标

从此,您可以计算出:

  • dx=x2-x1
  • dy=y2-y1
  • al=arctan(dy/dx)(线的角度)

当al < a1或al > a2时,弧线和直线不会相交,换句话说,线的角度不在弧线角度之间。相交的方程如下:

  • xa+rcos(al)=x1+cdx
  • ya+rsin(al)=y1+cdy

其中c(0 < c <= 1)是我们要找的变量。具体来说:

  • (xa+r * cos(al)-x1)/dx=c
  • (ya+r * sin(al)-y1)/dy=c

因此,相交点在(x1+c * dx),(y1+c * dy)

当弧线和直线有一个交点时,此算法才能正常工作。如果直线穿过弧线两次,则不会注册任何交点。


谢谢您的回复。这个答案真的帮了我。xa = X坐标 ya = Y坐标在上面的代码中,xa、ya和coordinate是什么意思?coordinate指的是极坐标吗? - user4486530
计算出的c值超出范围(0到1)。 - user4486530
xa和ya是弧线中心点的坐标。如果c大于1,则没有交点,因为直线在穿过弧之前停止。如果c为负数,则您可能在计算dx和dy时犯了错误,最有可能的是。 - 0xJonas
1
这假设直线穿过中心,是吗? - user1196549
我编写了与上述算法相同的算法,但是我没有得到正确的结果。C的值有时显示在0-1之间,有时大于1或小于0。 - user4486530
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接