【发布时间】:2017-06-24 21:51:38
【问题描述】:
我正在寻找使用圆锥的一般方程给定五个或六个点的椭圆方程: 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,所以我不能把它分开。
任何帮助将不胜感激。 谢谢。
【问题讨论】:
-
分不出来是什么意思?线性代数完全有能力处理这个问题。给定六个点独立,并且在椭圆上,系统可以解方程。
-
请提供造成麻烦的六点。
-
如果椭圆有任何点接触原点,则其方程中的 F 值等于 0。:) 在这种情况下,如果你有一个没有椭圆的椭圆,我认为你不能使用这种方法一个常数。如果我错了,请有人纠正我。
-
如果 F=0 则不能将方程除以 F,因为不能除以零。五个不起作用的点只是列出的前五个:np.array([6,5])、np.array([2,9])、np.array([0,0])、np.array ([11, 5.5]), np.array([6, 7]).
-
如果你知道你有一个椭圆(而不是一个更一般的圆锥截面),
A必须是非零的。由于您可以通过任意工厂缩放A到F,因此您可以在您的线性方程组中添加一个额外的约束A = 1(如果您有六个点,则删除其中一个;五个足以确定圆锥)。
标签: python math linear-algebra ellipse