Python生成椭圆连续顶点用于图形绘制的实现问题求助
问题原因
- 原有代码的椭圆方程计算逻辑错误:椭圆标准方程中,长半轴a、短半轴b满足
b = sqrt(a² - c²),原代码直接使用a² - c²作为y的系数,相当于把b²当成了b使用,导致纵坐标结果完全错误 - x的取值范围设置错误:椭圆上x的取值范围应为
[-a, a],原代码误设为[-a², 0],取值完全超出椭圆定义域 - 分象限拼接的逻辑冗余,还容易出现断点
修正后的实现方案
用极角遍历的方式生成连续顶点,逻辑更简单,生成的点顺序连续无断点,适合绘图使用:
import math def generate_ellipse_points(a, c, point_count=160): # 校验参数:长半轴a必须大于焦距c if a <= c: print("Error! 长半轴a必须大于焦距c") return [] # 计算短半轴b b = math.sqrt(a**2 - c**2) points = [] # 遍历极角,从0到2π生成连续点 for i in range(point_count): theta = 2 * math.pi * i / point_count x = a * math.cos(theta) y = b * math.sin(theta) points.append([x, y]) return points # 测试调用,a=2.0,c=0.5,默认生成160个点 ellipse_points = generate_ellipse_points(2.0, 0.5) print(ellipse_points)
参数说明
a:椭圆的长半轴长度c:椭圆的焦距(焦点到中心的距离)point_count:生成的顶点总数,数值越大绘制的椭圆越平滑,默认160个点足够满足普通绘图需求
如果一定要沿用你原本分象限拼接的实现思路,也可以修正原有代码的计算逻辑:
import math a1 = [] a2 = [] a3 = [] a4 = [] def ellipse(a, c): if a < c: print("Error!") return -1 b = math.sqrt(a**2 - c**2) x = -a step = a / 20.0 while x <= 0.0: y = b * math.sqrt(1 - (x**2)/(a**2)) if x != -a: a2.append([-x, y]) a4.append([x, -y]) if x != 0.0: a1.append([x, y]) a3.append([-x, -y]) x += step return 0 ellipse(2.0, 0.5) a2.reverse() a4.reverse() aa = a1 + a2 + a3 + a4 print(aa)
内容的提问来源于stack exchange,提问作者user16882937
相关产品推荐
相关产品推荐

