计算直线和椭圆之间的截距点 - 蟒蛇

loading...


0

我最近一直试图计算一个椭圆点

The desired point is the green point , knowing the red dots and the ellipse equation.

我使用numpy linspace在点上创建一个数组并使用zip(x轴,y轴)在红点之间迭代它们,并使用椭圆方程图中哪个点最接近1.(这是结果椭圆方程) .

这个概念大部分时间都有效,但在红色外点的某个位置,这种方法似乎没有给出好的结果

长话短说,任何想法如何计算python中的绿点? p.s - 椭圆可能有角度,两个hes轴都是已知的 .

loading...

1回答

  • 0

    设椭圆中心为 (0,0) (否则只减去中心坐标),半轴为 a, b ,旋转角度为 theta . 我们可以构建仿射变换以将椭圆变换为圆并将相同的变换应用于点P.

    1)旋转-theta

    px1 = px * Cos(theta) + py * Sin(theta)
     py1 = -px * Sin(theta) + py * Cos(theta)
    

    2)沿OY轴延伸(或收缩) a/b

    px2 = px1
    py2 = py1 * a / b
    

    3)找到交叉点

    plen = hypot(px2, py2)  (length of p2 vector)
    if (a > plen), then segment doesn't intersect ellipse - it fully lies inside
    
    ix = a * px2 / plen
    iy = a * py2 / plen
    

    4)向后收缩

    ix2 = ix
    iy2 = iy * b / a
    

    5)向后旋转

    ixfinal = ix2 * Cos(theta) - iy2 * Sin(theta)
    iyfinal = ix2 * Sin(theta) + iy2 * Cos(theta)
    
评论

暂时没有评论!