首页 文章

计算弧与线之间的交点

提问于
浏览
3

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

对于行:起点和终点 .
对于弧:起点/终点,起点/终点角,半径和中心点 .

我附上了一张图片 . 在下面的图像中,我绘制了一条弧和线,其中线与弧相交 .

所以现在我想找到交叉点 . 请给我一些算法或想法或任何可用的代码 .

enter image description here

2 回答

  • 3

    弧上的一个点有坐标

    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² ,给出

    c.cos(t) + s.sin(t) = d
    

    可以用 tan(p) = s/cd = 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π .

  • 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)

    此算法仅在弧和线具有单个交叉点时有效 . 如果线穿过弧线两次,那么它将不会记录任何交叉点 .

相关问题