我希望能够使用一般圆锥曲线的方程,在给定五个或六个点的情况下找到椭圆的方程:
A x2 + B xy + C y2 + D x + E y + F = 0。
起初我尝试使用六个点。这是我的Python代码:
import numpy as np
def conic_section(p1, p2, p3, p4, p5, p6):
def row(point):
return [point[0]*point[0], point[0]*point[1], point[1]*point[1],
point[0], point[1], 1]
matrix=np.matrix([row(p1),row(p2),row(p3),row(p4),row(p5), row(p6)])
b=[0,0,0,0,0,0]
return np.linalg.solve(matrix,b)
print conic_section(np.array([6,5]), np.array([2,9]), np.array([0,0]),
np.array([11, 5.5]), np.array([6, 7]), np.array([-1,-1]))
问题在于这会返回解[0,0,0,0,0,0],因为等式右边是零向量。
然后我试图通过减去F并将其除以来更改圆锥曲线:
A x2 + B xy + C y2 + D x + E y + F = 0
A x2 + B xy + C y2 + D x + E y = -F
A' x2 + B xy + C' y2 + D' x + E' y = -1.
但是这样做不起作用的原因是,如果我的一个点是(0,0),那么我最终会得到一个有一行零的矩阵,但是等式的右边在向量中的条目中具有-1。换句话说,如果我的一个点是(0,0)-那么“F”应该是0,所以我不能将它除掉。
任何帮助都将不胜感激。 谢谢。
A
必须是非零的。由于你可以通过任意因子缩放A
到F
,你可以在你的线性方程组中添加一个额外的约束条件A = 1
(如果你有六个点,则删除其中一个;五个点足以确定圆锥曲线)。 - Mark Dickinson