我试图用Python龟图形绘制一个字母“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")
用户可以使用另一个按键提示的对话框,在10-170之间的任何值更改 letter_height
和 letter_width
变量 . 现在,如果 letter_height = 170
& letter_width = 10
,"O"如下所示:
但是,如果将其与“H”(我的程序可以绘制的另一个字母)进行比较,您可以很容易地看出它们不是按比例分配的:
我想要做的是为"O"绘制一个椭圆,其垂直半径等于 letter_height
,其水平半径等于 letter_width
,这样"O"会随着 letter_width
的增加而变短,而随着 letter_height
的增加会更高 . 问题是,我真的不知道该怎么做!我听说你可以盖章,但我真的想要使用stamp方法,因为它的动画看起来并不吸引人 . 此外,当我尝试将 letter_height
和 letter_width
值映射到它时,由于某种原因它覆盖了整个屏幕!
总之,我想知道如何在乌龟图形中绘制一个椭圆 that can be manipulated like a circle (改变椭圆的半径长度,改变椭圆的范围等) . 我 don't want 使用 turtle.stamp()
方法,所以有没有办法绘制一个椭圆而不是在画布上加一个椭圆?任何帮助深表感谢!
2 回答
在测试@ moomoomoo309的椭圆代码并发现问题(打印错误的地方,宽度和高度与参数不匹配,忽略龟头,因此无法打印倾斜的椭圆, Headers 不跟踪绘图,不会使笔处于原始状态等我决定尝试自己写 .
我选择使用
turtle.circle()
作为相对于现有龟位置和 Headers 绘制椭圆的位置的模型,允许用户更改步骤(即制作其他不规则多边形),保留笔状态和开始位置,这就是我提出的(我使用了self
而不是turtle
或pen
,因为我打算将其作为方法安装):(可选)根据Adding a Method to an Existing Object Instance将此方法添加到我们的龟中:
演示代码以显示我们可以使用
turtle.ellipse()
绘制的所有新形状:EXAMPLE OUTPUT
我试图实现
extent
a laturtle.circle()
但是无法使其适当地在任意范围内工作(即以这样的方式,你可以以相同的范围调用turtle.ellipse()
两次,并让它继续它停止的曲线)所以我已经离开了那一天 .将我的答案带回OP的原始问题,我们现在可以做到:
要生成OP所需的基于椭圆的骨骼字母O:
我很确定这会起作用,但宽度为180/180和高度/ 180可能会关闭 .