我希望使用锥形的一般方程找到给定五或六个点的椭圆的方程: A x2 + B xy + C y2 + D x + E y + F = 0.
起初我尝试使用6分。这是我的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
'x2 + B xy + C'y2 + D'x + E'y = -1。
这不起作用的原因是,如果我的一个点是(0,0),那么我最终得到一个有一行零的矩阵,但是等式的右边会对于向量中的条目,其值为-1。换句话说,如果我的一个点是(0,0) - 那么“F”应该是0,所以我不能把它分开。
任何帮助将不胜感激。 谢谢。
答案 0 :(得分:3)
似乎你在椭圆上有精确的点,不需要近似,并且通过某种奇怪的方式使用Braikenridge-Maclaurin构造圆锥截面。
五点(x[i],y[i])
用这个显式方程(mathworld page, eq. 8)
因此,要找到椭圆方程,您可以通过第一行的未成年人构建决定因素的cofactor expansion。例如,系数A
是从x1y1
到右下角的子矩阵的决定性值,系数B
是没有xiyi
列的子矩阵的行列式的否定值,依此类推。
答案 1 :(得分:1)
椭圆方程(无平移和旋转):
目标是在变量Monad
到A
中解决此线性等式:
使用:
F
输出:
a:6.999999999999998 b:4.0
请参阅:
http://mathworld.wolfram.com/ConicSection.html https://fr.wikipedia.org/wiki/Ellipse_(math%C3%A9matiques)#Forme_matricielle