我试图用Python turtle图形绘制一个字母“O”。为了提示“O”的绘制,它的函数是用按键调用的。下面是我到目前为止所做的:
def draw_O():
# Draw an O
penup()
forward(letter_height/4)
pendown()
forward(letter_width/2)
circle(letter_height/4, 90)
forward(letter_height/2)
circle(letter_height/4, 90)
forward(letter_width/2)
circle(letter_height/4, 90)
forward(letter_height/2)
circle(letter_height/4, 90)
forward(letter_width/2)
penup()
forward(space_width + letter_height/4)
pendown()
onkey(draw_O, "o")
字符串letter_height
和letter_width
变量可以由用户使用另一个按键提示的对话框从10-170之间的任何值进行更改。现在,如果letter_height = 170
和letter_width = 10
,则“O”出现如下所示:
x1c 0d1x的数据
然而,如果你把它和“H”(我的程序可以画出的另一个字母)比较,你可以很容易地看到它们并不成比例:
的
我想做的是为“O”画一个椭圆,它的垂直半径等于letter_height
,水平半径等于letter_width
,这样“O”会随着letter_width
的增加而变短,随着letter_height
的增加而变高。问题是,我真的不知道怎么做!我听说你可以戳一个,但我真的做 * 不想使用戳方法,因为它的动画看起来不那么吸引人。而且,当我试图Map我的letter_height
和letter_width
值到它,它覆盖了整个屏幕出于某种原因!
最后,我想知道如何在turtle graphics中绘制一个椭圆**,它可以像圆一样操作**(改变椭圆的半径长度,改变椭圆的范围等)。我 * 不想**使用turtle.stamp()
方法,所以除了在画布上冲压一个椭圆之外,还有什么方法可以绘制一个椭圆吗?任何帮助都非常感谢!
2条答案
按热度按时间piok6c0g1#
在测试@moomoomoo309的椭圆代码并发现问题(打印在错误的地方,宽度和高度不匹配参数,忽略海龟标题,所以不能打印倾斜的椭圆,标题不跟踪绘图,不离开笔在原始状态,等等)后,我决定尝试写我自己的。
我选择使用
turtle.circle()
作为相对于现有海龟位置和航向绘制椭圆的模型,允许用户更改步骤(即,制作其他不规则多边形),离开笔的状态和位置,这就是我的想法(我使用self
而不是turtle
或pen
,因为我打算将其作为一种方法安装):字符串
(可选)将此方法添加到我们的turtle per Adding a Method to an Existing Object Instance:
型
演示代码显示我们可以用
turtle.ellipse()
绘制的所有新形状:型
示例输出
x1c 0d1x的数据
我试着用
turtle.circle()
来实现extent
,但是不能让它在任意范围内正常工作(也就是说,你可以用相同的范围调用turtle.ellipse()
两次,让它继续它停止的曲线),所以我把它留到另一天。把我的答案带回到OP的原始问题,我们现在可以做:
型
要生成OP所需的基于椭圆的瘦字母O:
的
tzdcorbm2#
我敢肯定这将工作,180在宽度/180和高度/180可能关闭虽然。
字符串