我想计算弧和线之间的交点 . 我有线和弧的所有数据 .
对于行:起点和终点 .对于弧:起点/终点,起点/终点角,半径和中心点 .
我附上了一张图片 . 在下面的图像中,我绘制了一条弧和线,其中线与弧相交 .
所以现在我想找到交叉点 . 请给我一些算法或想法或任何可用的代码 .
弧上的一个点有坐标
R.cos(t) + Xc R.sin(t) + Yc
使用线性方程的隐式形式(给定或从两个给定点获得),
A.X + B.Y + C = 0
然后
A.R.cos(t) + B.R.sin(t) + A.Xc + B.Yc + C = 0
为了解决这个三角方程,首先将两个成员除以 R.√A²+B² ,给出
R.√A²+B²
c.cos(t) + s.sin(t) = d
可以用 tan(p) = s/c 和 d = cos(q) 重写:
tan(p) = s/c
d = cos(q)
cos(t-p) = cos(q)
t = p +/- q = arctan(B/A) +/- arccos(-(A.Xc + B.Yc + C)/R.√A²+B²)
最后,您需要检查 t 的这些值是否落在 (start, end) 范围内,模2π .
t
(start, end)
让我们定义一个弧和一条线:
弧:
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)
此算法仅在弧和线具有单个交叉点时有效 . 如果线穿过弧线两次,那么它将不会记录任何交叉点 .
2 回答
弧上的一个点有坐标
使用线性方程的隐式形式(给定或从两个给定点获得),
然后
为了解决这个三角方程,首先将两个成员除以
R.√A²+B²
,给出可以用
tan(p) = s/c
和d = cos(q)
重写:然后
最后,您需要检查
t
的这些值是否落在(start, end)
范围内,模2π .让我们定义一个弧和一条线:
弧:
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)
此算法仅在弧和线具有单个交叉点时有效 . 如果线穿过弧线两次,那么它将不会记录任何交叉点 .