Подгонка 2D-эллипса к точкам - PullRequest
1 голос
/ 27 февраля 2020

Я пытаюсь подогнать эллипс к точечной диаграмме. Код, который я использую, ниже

    import numpy as np
    import matplotlib.pyplot as plt

    # Xi and Yi are arrays with my X and Y coordinates of points

    # Transform into columns
    X = np.c_[Xi]
    Y = np.c_[Yi]

    # Solve the least squares problem
    A = np.hstack([X**2, X * Y, Y**2, X, Y])
    b = np.ones_like(X)
    x = np.linalg.lstsq(A, b)[0].squeeze()

    # Plot the data
    x_coord = np.linspace(-5,5,300)
    y_coord = np.linspace(-5,5,300)
    X_coord, Y_coord = np.meshgrid(x_coord, y_coord)
    Z_coord = x[0] * X_coord ** 2 + x[1] * X_coord * Y_coord + x[2] * Y_coord**2 + x[3] * X_coord + x[4] * Y_coord
    plt.contour(X_coord, Y_coord, Z_coord, levels=[1], colors=('r'), linewidths=2)
    plt.show()

Проблема иногда в том, что лучше всего подходит гипербола вместо эллипса, поскольку они имеют одинаковую формулу Ax² + Bxy + Cy² + Dx + Ey + F = 0. Можно ли как-нибудь изменить матрицу A, чтобы убедиться, что я всегда получаю эллипс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...