最近我一直在尝试计算一个椭圆点
所需点是绿色点,知道红色点 和椭圆方程。
我使用numpy linspace在点上创建数组 并使用zip(x轴,y轴)进行迭代 在红色点之间,并使用椭圆 等式计算出哪个点最接近1。 (这是椭圆方程的结果)。
这个概念大多数时候都有效,但是在某些地方 红色外点的颜色,这种方法似乎效果不佳
长话短说,任何想法如何在python中计算绿点? p.s-椭圆可能有角度,hes轴都已知。答案 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)位分辨率给出点 您可以增加范围以获得更好的分辨率。