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

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

http://img1.mukewang.com/613ca9e70001d70606310366.jpg

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

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

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

长话短说,知道如何计算python中的绿点吗?ps - 椭圆可能有角度,两个轴都是已知的。


白猪掌柜的
浏览 355回答 2
2回答

大话西游666

我最终使用了这个答案中的椭圆方程:并创建了一个 in_ellipse 函数然后我使用了中值定理,对点进行了很好的估计def in_ellipse(point, ellipse):    return true if point in ellipsereturn falsedot_a = ellipse_centerdot_b = dotfor 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_pointreturn center_point该系统在小数点后以 7 (2^20) 位分辨率给出点,您可以增加范围以获得更好的分辨率。

肥皂起泡泡

让椭圆中心为(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 = px1py2 = py1 * a / b3) 找到交点plen = hypot(px2, py2)  (length of p2 vector)if (a > plen), then segment doesn't intersect ellipse - it fully lies insideix = a * px2 / pleniy = a * py2 / plen4)进行向后收缩ix2 = ixiy2 = iy * b / a5) 反向旋转ixfinal = ix2 * Cos(theta) - iy2 * Sin(theta)iyfinal = ix2 * Sin(theta) + iy2 * Cos(theta)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python