乌龟,倾斜一个物体

2024-05-16 14:52:49 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我有一个问题,从我的班级,要求我创建一个笑脸使用seroperate功能的眼睛,嘴和头部。在那之后,他们希望我们画10次它彼此轻轻地重叠,并且每重复一次让它向左倾斜10次。我知道怎么做for循环,问题是倾斜。下面是我目前所拥有的。你能给我指一下倾斜的正确方向吗?在

import turtle
s=turtle.Screen()
p=turtle.Turtle()

def happymouth(p,x,y):
    p.setheading(-60)
    jump(p,x-60.62,y+65)
    p.circle(70,120)

def eyes(p,x,y):
    jump(p,x+35,y+120)
    p.dot(25)
    jump(p,x-35,y+120)
    p.dot(25)

def jump(p,x,y):
    p.up()
    p.goto(x,y)
    p.down()


def emoticon(p,x,y):
    p=turtle.Turtle()
    s=turtle.Screen()
    p.pensize(3)
    p.setheading(0)
    jump(p,x,y)
    p.circle(100)
    eyes(p,x,y)
    happymouth(p,x,y)
    jump(p,x,y)

Tags: 功能defscreendot眼睛turtle班级eyes
1条回答
网友
1楼 · 发布于 2024-05-16 14:52:49

你可以这样做,但这需要你重新思考你的绘图逻辑。要使表情符号在10度旋转下保持不变,绘制表情符号时海龟的位置必须全部是相对的,而不是绝对的。否turtle.goto(),否jump(turtle, x, y)。然后,为了使你的十个表情在页面上合适,你需要使大小也相对,而不是绝对。下面是一个重做的方法:

from turtle import Turtle, Screen

def jump(turtle, x, y):
    turtle.up()
    turtle.goto(x, y)
    turtle.down()

def head(turtle, size):
    # to draw circle with current position as center, have to adjust the y position
    turtle.up()
    turtle.right(90)
    turtle.forward(size)
    turtle.left(90)
    turtle.color("black", "yellow")
    turtle.down()

    turtle.begin_fill()
    turtle.circle(size)
    turtle.end_fill()

    # return to the center of the circle
    turtle.up()
    turtle.color("black")
    turtle.left(90)
    turtle.forward(size)
    turtle.right(90)
    turtle.down()

def eyes(turtle, size):
    turtle.up()
    turtle.forward(0.35 * size)
    turtle.left(90)
    turtle.forward(0.2 * size)
    turtle.right(90)
    turtle.down()

    turtle.dot(0.25 * size)

    turtle.up()
    turtle.backward(0.7 * size)
    turtle.down()

    turtle.dot(0.25 * size)

    turtle.up()
    turtle.forward(0.35 * size)
    turtle.right(90)
    turtle.forward(0.2 * size)
    turtle.left(90)
    turtle.down()

def happymouth(turtle, size):
    turtle.up()
    turtle.left(180)
    turtle.forward(0.6 * size)
    turtle.left(90)
    turtle.forward(0.35 * size)
    turtle.left(90)
    turtle.down()

    turtle.right(60)
    turtle.circle(0.7 * size, 120)

    turtle.up()
    turtle.circle(0.7 * size, 240)
    turtle.left(60)
    turtle.forward(0.6 * size)
    turtle.left(90)
    turtle.forward(0.35 * size)
    turtle.right(90)
    turtle.down()

def emoticon(turtle, size):
    turtle.pensize(0.03 * size)
    head(turtle, size)
    eyes(turtle, size)
    happymouth(turtle, size)

screen = Screen()
yertle = Turtle()

width, height = screen.window_width(), screen.window_height()

yertle.setheading(-50)

for xy in range(-5, 5):
    jump(yertle, xy * width / 10, xy * height / 10)

    emoticon(yertle, 60)

    yertle.setheading(yertle.heading() + 10)

screen.exitonclick()

上面的代码没有优化到绘图时,它总是返回到中心,以确保每个组件都是相对于它绘制的。但基本上是有效的:

enter image description here

有一种完全不同的方法可以解决这个问题,它允许我们使用绝对turtle.goto(),但也有其自身的困难。我们可以将海龟本身设置为一个表情符号,并在页面上标记它。这也允许我们忽略相对大小,因为turtle光标有自己的大小调整功能:

^{pr2}$

不幸的是,使用turtle.*_poly()完成的图章只能由闭合多边形组成,这意味着表情符号的微笑会有所变化:

enter image description here

玩得开心!在

相关问题 更多 >