Python 海龟图形比例大小和位置
Python Turtle graphics scale size and position
我需要一些关于 Python 乌龟图形的帮助。我需要创建一个在 for ... in range()
循环中每次变小的房子。
我正在用三座由基本乌龟形状组成的房子创作风景。有没有办法,当我创建一个基本形状的房子时,我可以使用 for ... in range()
循环来改变房子的位置并使其尺寸变小一点?
目前我在尝试什么:
def house(turtlename,hs,xroof,xdoor,xwindow,ywindow):
housesquare(turtlename,hs)
turtlename.pu()
turtlename.goto ((int(hs*xroof),int(hs*1)))
turtlename.pd()
housetriangle(turtlename,hs)
turtlename.pu()
turtlename.goto((int(hs*xdoor),0 ))
turtlename.pd()
housedoor(turtlename,hs*0.7,hs*0.3)
turtlename.pu()
turtlename.goto((int(hs*xwindow), int(hs*ywindow)))
turtlename.pd()
housesquare(turtlename,hs*0.3)
使用此代码,我尝试绘制第二个较小尺寸的房子。 goto()
命令打乱了整个形状,我必须手动完成所有操作,但任务是使用 for ... in range(4)
绘制四栋房子,每栋房子都要小一些,并放置得稍微远一些。
你需要绘制一个相对,而不是绝对 ,时尚。您可以使用 .goto()
执行此操作,它看起来类似于:
turtle.goto(turtle.xcor() + hs * xwindow, turtle.ycor() + hs * ywindow)
也就是说,相对于你现在所在的位置移动。但是,完全避免 .goto()
并使用 .forward()
、.backward()
、.left()
和 .right()
等相对运动方法可能会更简单。这是使用这些相对运动方法对您的代码进行的修改:
from turtle import Turtle, Screen
def housesquare(turtle, width):
for _ in range(4):
turtle.forward(width)
turtle.left(90)
def housetriangle(turtle, base):
for _ in range(3):
turtle.forward(base)
turtle.left(120)
def housedoor(turtle, height, width):
for _ in range(2):
turtle.forward(width)
turtle.left(90)
turtle.forward(height)
turtle.left(90)
def house(turtle, hs, xroof, xdoor, xwindow, ywindow):
housesquare(turtle, hs)
turtle.penup()
turtle.left(90)
turtle.forward(hs)
turtle.right(90)
turtle.forward(hs * xroof)
turtle.pendown()
housetriangle(turtle, hs)
turtle.penup()
turtle.right(90)
turtle.forward(hs)
turtle.left(90)
turtle.forward(hs * xdoor)
turtle.pendown()
housedoor(turtle, hs * 0.7, hs * 0.3)
turtle.penup()
turtle.backward(hs * xdoor)
turtle.forward(hs * xwindow)
turtle.left(90)
turtle.forward(hs * ywindow)
turtle.right(90)
turtle.pendown()
housesquare(turtle, hs * 0.3)
turtle.penup()
turtle.backward(hs * xwindow)
turtle.left(90)
turtle.backward(hs * ywindow)
turtle.right(90)
turtle.pendown()
screen = Screen()
yertle = Turtle()
size = 100
for factor in range(1, 4):
house(yertle, size / factor, 0.0, 0.2, 0.6, 0.4)
yertle.penup()
yertle.forward(1.5 * size / factor)
yertle.right(15)
yertle.pendown()
yertle.hideturtle()
screen.exitonclick()
请注意,由于相对绘制逻辑,它不仅可以绘制不同大小的房子,还可以旋转它:
我需要一些关于 Python 乌龟图形的帮助。我需要创建一个在 for ... in range()
循环中每次变小的房子。
我正在用三座由基本乌龟形状组成的房子创作风景。有没有办法,当我创建一个基本形状的房子时,我可以使用 for ... in range()
循环来改变房子的位置并使其尺寸变小一点?
目前我在尝试什么:
def house(turtlename,hs,xroof,xdoor,xwindow,ywindow):
housesquare(turtlename,hs)
turtlename.pu()
turtlename.goto ((int(hs*xroof),int(hs*1)))
turtlename.pd()
housetriangle(turtlename,hs)
turtlename.pu()
turtlename.goto((int(hs*xdoor),0 ))
turtlename.pd()
housedoor(turtlename,hs*0.7,hs*0.3)
turtlename.pu()
turtlename.goto((int(hs*xwindow), int(hs*ywindow)))
turtlename.pd()
housesquare(turtlename,hs*0.3)
使用此代码,我尝试绘制第二个较小尺寸的房子。 goto()
命令打乱了整个形状,我必须手动完成所有操作,但任务是使用 for ... in range(4)
绘制四栋房子,每栋房子都要小一些,并放置得稍微远一些。
你需要绘制一个相对,而不是绝对 ,时尚。您可以使用 .goto()
执行此操作,它看起来类似于:
turtle.goto(turtle.xcor() + hs * xwindow, turtle.ycor() + hs * ywindow)
也就是说,相对于你现在所在的位置移动。但是,完全避免 .goto()
并使用 .forward()
、.backward()
、.left()
和 .right()
等相对运动方法可能会更简单。这是使用这些相对运动方法对您的代码进行的修改:
from turtle import Turtle, Screen
def housesquare(turtle, width):
for _ in range(4):
turtle.forward(width)
turtle.left(90)
def housetriangle(turtle, base):
for _ in range(3):
turtle.forward(base)
turtle.left(120)
def housedoor(turtle, height, width):
for _ in range(2):
turtle.forward(width)
turtle.left(90)
turtle.forward(height)
turtle.left(90)
def house(turtle, hs, xroof, xdoor, xwindow, ywindow):
housesquare(turtle, hs)
turtle.penup()
turtle.left(90)
turtle.forward(hs)
turtle.right(90)
turtle.forward(hs * xroof)
turtle.pendown()
housetriangle(turtle, hs)
turtle.penup()
turtle.right(90)
turtle.forward(hs)
turtle.left(90)
turtle.forward(hs * xdoor)
turtle.pendown()
housedoor(turtle, hs * 0.7, hs * 0.3)
turtle.penup()
turtle.backward(hs * xdoor)
turtle.forward(hs * xwindow)
turtle.left(90)
turtle.forward(hs * ywindow)
turtle.right(90)
turtle.pendown()
housesquare(turtle, hs * 0.3)
turtle.penup()
turtle.backward(hs * xwindow)
turtle.left(90)
turtle.backward(hs * ywindow)
turtle.right(90)
turtle.pendown()
screen = Screen()
yertle = Turtle()
size = 100
for factor in range(1, 4):
house(yertle, size / factor, 0.0, 0.2, 0.6, 0.4)
yertle.penup()
yertle.forward(1.5 * size / factor)
yertle.right(15)
yertle.pendown()
yertle.hideturtle()
screen.exitonclick()
请注意,由于相对绘制逻辑,它不仅可以绘制不同大小的房子,还可以旋转它: