龟,倾斜物体

时间:2013-10-14 06:16:27

标签: python turtle-graphics tilt

大家好,我的课上有一个问题,要求我用眼睛,嘴巴和头部的血清功能创造一个笑脸。在那之后,他们希望我们在相互轻拍的情况下画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)

1 个答案:

答案 0 :(得分:4)

您可以这样做,但它需要您重新考虑绘图逻辑。对于在10度旋转下举起的表情符号,你在绘制表情符号时对乌龟的定位必须都是相对的,而不是绝对的。没有$newarr = array("0"=>"red", "1"=>"blue", "2"=>"black", "3"=>"orange"); ,没有turtle.goto()。然后为了使你的十个表情符号适合页面,你需要调整大小,而不是绝对。这是一个返工,这样做:

jump(turtle, x, y)

上述代码并未针对绘图进行优化 - 它始终返回到中心以确保每个组件都相对于它绘制。但它基本上有效:

enter image description here

我们可以通过一种完全不同的方式来解决这个问题,这使我们可以使用绝对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() ,但却有自己的困难。我们可以将乌龟本身设置为表情符号并将其标记在整个页面上。这也允许我们忽略相对大小,因为乌龟光标有自己的大小调整功能:

turtle.goto()

不幸的是,使用from turtle import Turtle, Screen, Shape def jump(turtle, x, y): turtle.up() turtle.goto(x, y) turtle.down() def head(turtle, shape, x, y): jump(turtle, x, y - 100) turtle.begin_poly() turtle.circle(100) turtle.end_poly() shape.addcomponent(turtle.get_poly(), "yellow", "black") def happymouth(turtle, shape, x, y): turtle.setheading(-60) jump(turtle, x - 60, y - 35) turtle.begin_poly() turtle.circle(70, 120) turtle.end_poly() shape.addcomponent(turtle.get_poly(), "black") turtle.setheading(90) def eyes(turtle, shape, x, y): jump(turtle, x + 35, y + 20) turtle.begin_poly() turtle.circle(13) turtle.end_poly() shape.addcomponent(turtle.get_poly(), "black") jump(turtle, x - 35, y + 20) turtle.begin_poly() turtle.circle(13) turtle.end_poly() shape.addcomponent(turtle.get_poly(), "black") def emoticon(turtle, x, y): shape = Shape("compound") head(turtle, shape, x, y) eyes(turtle, shape, x, y) happymouth(turtle, shape, x, y) screen.register_shape("emoticon", shape) screen = Screen() yertle = Turtle(visible="False") emoticon(yertle, 0, 0) yertle.shape("emoticon") yertle.clear() yertle.shapesize(0.6, 0.6) 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) yertle.stamp() yertle.setheading(yertle.heading() + 10) screen.exitonclick() 完成的邮票只能由封闭的多边形组成,这意味着表情符号的微笑会有所改变:

enter image description here

玩得开心!