Python 如何绘制给定点数的最佳椭圆?

Python 如何绘制给定点数的最佳椭圆?,python,math,geometry,Python,Math,Geometry,给定向量p,q和点数n,我想用这n个点尽可能地近似椭圆的形状。为此,我使用椭圆的参数方程,并在双for循环中更改半径和角度: n = 10000 points = [] p = [300, 0] q = [0, 200] root = int(math.sqrt(n)) for a in range(root): for b in range(root): x = 400 + (a/root)*(p[0] - q[0])*math.cos(2*math.pi*b/root

给定向量p,q和点数n,我想用这n个点尽可能地近似椭圆的形状。为此,我使用椭圆的参数方程,并在双for循环中更改半径和角度:

n = 10000
points = []
p = [300, 0]
q = [0, 200]
root = int(math.sqrt(n))
for a in range(root):
    for b in range(root):
        x = 400 + (a/root)*(p[0] - q[0])*math.cos(2*math.pi*b/root)
        y = 300 - (a/root)*(p[1] - q[1])*math.sin(2*math.pi*b/root)
        points.append([x, y])
for w in points:
    pygame.draw.circle(screen, (200, 50, 75), (int(w[0]), int(w[1])), 1)
在这里,我用pygame画画,但这并不重要。给定这些参数,我的椭圆如下所示:

n=100000。看起来是这样的:


鉴于椭圆的性质,在中间使用多个点,利用辐射和角度的基本参数化。正因为如此,我需要非常大的n来获得好的图片。如何更改参数化以使点更好地分布在整个区域?

也许可以均匀地创建点,然后过滤掉椭圆以外的点

import numpy as np
from math import sqrt
import matplotlib.pyplot as plt

def filter_points(h, k, a, b, x, y): 
  mask = ((x-h)**2)/(a**2) + ((y-k)**2)/(b**2) <= 1
  return x[mask], y[mask]

h = 0
k = 0
a = 4
b = 5
N = 10000
n = int(sqrt(N))

X, Y = np.meshgrid(
  np.linspace(-a,a,n),
  np.linspace(-b,b,n)
)

X, Y = filter_points(h, k, a, b, X[:], Y[:])
points = np.asarray([X, Y]).T

plt.figure
plt.plot(X,Y,'.')
将numpy导入为np
从数学导入sqrt
将matplotlib.pyplot作为plt导入
def过滤器_点(h、k、a、b、x、y):

蒙版=((x-h)**2)/(a**2)+((y-k)**2)/(b**2)由于这是一个矩形显示,我建议您使用矩形方法:根据屏幕分辨率的需要绘制尽可能接近的水平线。更好的是,在你使用的软件包中寻找“形状填充”功能。为什么不使用draw.ellipse???@Jacek Potpackzuk你能接受下面的答案吗?我想它回答了你的问题?是的,我的错。我认为有更好的方法,但这一种已经足够好了。非常感谢。