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

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

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轴都是已知的 .

回答(1)

2 years ago

设椭圆中心为 (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)