Простой способ - растянуть ось x и ось y на другой коэффициент, то есть заменить radius
на x_semiaxis
и y_semiaxis
, чтобы обозначить полуоси эллипса :
def ellipse_points(resolution, center, x_semiaxis, y_semiaxis):
"""
Generate points which define a ellipse on an image.
Centre refers to the centre of the ellipse.
"""
radians = np.linspace(0, 2 * np.pi, resolution)
x = center[0] + x_semiaxis * np.cos(radians)
y = center[1] + y_semiaxis * np.sin(radians)
return np.array([x, y])
Обратите внимание, что я использую более традиционную формулу, чтобы иметь x
по косинусу и y
по синусу, и я избегаю включения транспонирования, чтобы упростить построение. Вы можете легко вернуть его.
import matplotlib.pyplot as plt
plt.scatter(*ellipse_points(1000, (10, 20), 200, 100))
plt.scatter((10,), (20,)) # plot the center too
plt.gca().set_aspect('equal')