如何用Python Turtle绘制以(200,-200)为半分界点的短半径椭圆?
Python Turtle 椭圆绘制问题解决
问题描述
绘制椭圆时需满足:
- 椭圆的底部端点准确位于(200, -200)
- 竖直轴线需严格平分椭圆
- 仅允许输入短半径
r、字体大小、字体/轴线颜色、椭圆颜色,禁止使用额外库
原代码问题分析
- 椭圆绘制的起点和初始角度错误,导致椭圆位置偏离预期点
- 轴线的起点与长度计算错误,无法对齐椭圆对称轴
修正方案及代码
import turtle fontsize = int(input()) # 字体大小(示例:60) maincol = input() # 文字和轴线颜色(示例:MidnightBlue) r = int(input()) # 椭圆短半径(示例:120) ovalcol = input() # 椭圆颜色(示例:LawnGreen) st = turtle.Turtle() st.speed(0) # 加快绘制速度 # 绘制公式文本 st.penup() st.goto(-300, 150) st.color(maincol) formula = f"\N{GREEK SMALL LETTER THETA} = \N{GREEK SMALL LETTER OMEGA}t + \N{VULGAR FRACTION ONE HALF}\N{GREEK SMALL LETTER EPSILON}t\N{SUPERSCRIPT TWO}" st.write(formula, move=False, align='left', font=('Times New Roman', fontsize, 'normal')) # 计算椭圆关键位置:底部端点在(200, -200),长半径为2r oval_bottom = (200, -200) oval_center = (200, oval_bottom[1] + 2*r) oval_left = (oval_center[0] - r, oval_center[1]) # 绘制椭圆 st.penup() st.goto(oval_left) st.color(ovalcol) st.pendown() st.begin_fill() st.setheading(270) # 初始方向向下,确保椭圆竖直对齐 for _ in range(2): st.circle(2*r, 90) # 绘制长半径圆弧(竖直方向) st.circle(r, 90) # 绘制短半径圆弧(水平方向) st.end_fill() # 绘制平分轴线 st.penup() st.goto(oval_bottom) st.color(maincol) st.pendown() st.setheading(90) # 方向向上 st.forward(4*r) # 轴线长度等于椭圆长轴 st.hideturtle() turtle.done()
关键修正点
- 位置校准:通过计算明确椭圆中心与端点位置,确保底部端点严格落在(200, -200)
- 椭圆绘制逻辑:调整初始绘制角度为270度,交替绘制长、短半径圆弧,生成对称的竖直椭圆
- 轴线对齐:轴线起点设为椭圆底部,长度匹配椭圆长轴,实现完美平分
内容的提问来源于stack exchange,提问作者Денис Кузьмичев
相关产品推荐
相关产品推荐

