Java 计算圆弧和直线之间的交点

Java 计算圆弧和直线之间的交点,java,geometry,Java,Geometry,我想计算圆弧和直线之间的交点。我有直线和圆弧的所有数据 对于线:起点和终点。 对于圆弧:起点/终点、起点/终点角度、半径和中心点 我在此附上一张图片。在下图中,我画了一条弧和一条线,这条线与弧相交 现在我想找到交点。请给我一些算法或想法,或者如果有任何可用的代码 让我们定义一条弧和一条线: 弧: xa=X坐标 ya=Y坐标 a1=起始角度(较小角度) a2=结束角(较大角度) r=半径 行: x1=第一个X坐标 x2=第二个X坐标 y1=第一个Y坐标 y1=第二个Y坐标 由此可以计算:

我想计算圆弧和直线之间的交点。我有直线和圆弧的所有数据

对于线:起点和终点。
对于圆弧:起点/终点、起点/终点角度、半径和中心点

我在此附上一张图片。在下图中,我画了一条弧和一条线,这条线与弧相交

现在我想找到交点。请给我一些算法或想法,或者如果有任何可用的代码


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

弧:

  • 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)(线的角度)
当ala2时,弧和线不会相交,或者换句话说,线的角度不在弧的角度之间。 交叉点的方程式如下所示:

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

其中c(0
R.cos(t) + Xc
R.sin(t) + Yc
使用直线方程的隐式形式(给定或从两个给定点获得)

然后

要求解此三角方程,首先将两个成员除以
R。√A²+B²
,给出

c.cos(t) + s.sin(t) = d
可以用tan(p)=s/c和
d=cos(q)
重写:

然后


最后,您需要检查
t
的这些值是否在
范围内(开始、结束)
,模2π。

老实说!我在几秒钟内搜索了math stackexchange上的两个类似问题。可能与@WeatherVane重复:这两个链接中的解决方案没有解决弧定界间隔的问题,或者解决得很差。为什么这个问题被否决了?它与其他任何问题一样有效。Th谢谢你的回答。这个答案真的帮了我的忙。xa=X-坐标ya=Y-坐标在上面这一行是什么意思?xa,ya,坐标是弧坐标?c的计算值超出范围(0到1).xa和ya是圆弧中心点的坐标。如果c大于1,则没有交点,因为直线在穿过圆弧之前停止。如果c为负值,则可能在某个地方出错,最有可能是在计算dx和dy时。这假设直线穿过中心,不是吗?我编写了算法rithm与上面的相同,但我没有得到正确的结果。C的值,有时显示在0-1之间,有时大于1或小于0。谢谢你的回答。我不知道所有的事情,比如它意味着什么,所有的参数-R,t,A,B,C,P…等等。这意味着上面声明的所有变量对于m都不清楚e、 如果你能解释一下,我就会知道如何在我的程序中使用这个算法。@ShiladittyaChakraborty:这条线是如何给出的?我有点(起点(x1,y1)和终点(x2,y2))对于直线,.单击坐标表示用户在上面定义的矩形弧和中心点周围单击的位置。然后我将单击坐标连接到矩形中心点以绘制直线。然后
a=Y2-Y1
B=X1-X2
C=X2.Y1-X1.Y2
。这里的t、p和q是什么?
A.R.cos(t) + B.R.sin(t) + A.Xc + B.Yc + C = 0
c.cos(t) + s.sin(t) = d
cos(t-p) = cos(q)
t = p +/- q = arctan(B/A) +/- arccos(-(A.Xc + B.Yc + C)/R.√A²+B²)