如何找到椭圆的方程

时间:2017-06-24 21:51:38

标签: python math linear-algebra ellipse

我希望使用锥形的一般方程找到给定五或六个点的椭圆的方程: 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,所以我不能把它分开。

任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:3)

似乎你在椭圆上有精确的点,不需要近似,并且通过某种奇怪的方式使用Braikenridge-Maclaurin构造圆锥截面。

五点(x[i],y[i])用这个显式方程(mathworld page, eq. 8

确定椭圆

enter image description here

因此,要找到椭圆方程,您可以通过第一行的未成年人构建决定因素的cofactor expansion。例如,系数A是从x1y1到右下角的子矩阵的决定性值,系数B是没有xiyi列的子矩阵的行列式的否定值,依此类推。

答案 1 :(得分:1)

椭圆方程(无平移和旋转):

\frac{x^2}{a} + \frac{y^2}{b} = 1

目标是在变量MonadA中解决此线性等式

Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0

使用:

F

输出:

http://haskellbook.com

a:6.999999999999998 b:4.0

请参阅:

ellipse http://mathworld.wolfram.com/ConicSection.html https://fr.wikipedia.org/wiki/Ellipse_(math%C3%A9matiques)#Forme_matricielle