计算直线和椭圆之间的截点-python

时间:2018-12-10 12:37:11

标签: python python-3.x math

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

enter image description here

所需点是绿色点,知道红色点 和椭圆方程。

我使用numpy linspace在点上创建数组 并使用zip(x轴,y轴)进行迭代 在红色点之间,并使用椭圆 等式计算出哪个点最接近1。 (这是椭圆方程的结果)。

这个概念大多数时候都有效,但是在某些地方 红色外点的颜色,这种方法似乎效果不佳

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我最终使用了answer中的椭圆方程:

并创建了一个in_ellipse函数

然后Iv'e使用Intermediate value theorem进行了很好的估算 点的

def in_ellipse(point, ellipse):
    return true if point in ellipse
return false


dot_a = ellipse_center
dot_b = dot
for i in range(20):
    center_point = ((dot_b.y - dot_a.y)/2, (dot_b.x - dot_a.x)/2)
    if in_ellipse(center_point):
        dot_a = center_point
    else:
        dot_b = center_point

return center_point

此系统以小数点后的7(2 ^ 20)位分辨率给出点 您可以增加范围以获得更好的分辨率。