在Python Turtle图形中制作正方形和旋转方块的简单方法

时间:2016-12-06 22:15:08

标签: python turtle-graphics

我正在使用龟图来重新创建此模式:enter image description here

这可能是一个非常基本的问题,但是我有一种更简单的方法可以在方形内创建旋转的方形吗?事实上,我只是用一只乌龟制作一个正常的方形,然后慢慢地将第二只乌龟移动到位以绘制旋转的部分。例如:

import turtle
alex = turtle.Turtle()
tess = turtle.Turtle()

for i in range(4):
    alex.fd(50)
    alex.lt(90)
tess.pu()
tess.fd(25)
tess.rt(90)
tess.fd(10)
tess.rt(225)
tess.pd()
for i in range(4):
    tess.fd(50)
    tess.lt(90)

对我来说,最好是笨重的,如果我改变边长(我打算这样做),它就不起作用。

非常感谢!

3 个答案:

答案 0 :(得分:3)

这是开始使用功能的好时机!使用函数可以创建可重复使用的代码块,可以重复某个任务 - 例如,绘制正方形或方形正方形。

让我们使用您的代码并添加一个square函数,该函数绘制一定大小的正方形。为此,我们将告诉函数使用哪个乌龟,以及方块的大小:

def square(this_turtle, side_length):
    for i in range(4):
        this_turtle.fd(side_length)
        this_turtle.lt(90)

现在让我们在你的代码中使用新方法:

square(alex, 50)
tess.pu()
tess.fd(25)
tess.rt(90)
tess.fd(10)
tess.rt(225)
tess.pd()
square(tess, 50)

然后,您可以考虑如何制作star函数,该函数可以生成任何给定大小的“方形正方形”形状。祝你好运!

以下是有关如何使用函数的更详细说明:http://openbookproject.net/thinkcs/python/english3e/functions.html(我怀疑这是您已经关注的教程!)

答案 1 :(得分:3)

我会向你提出一个相反的方法和其他过于关注绘制方块的答案,这些方法需要花费太多的工作才能完成。由于这是一个重复模式,我认为 stamping 是可行的方式,就像现实生活中的重复模式一样。具体做法是:

from turtle import Turtle, Screen

BASE_UNIT = 20

def tessellate(turtle, start, stop, step):
    for x in range(start, stop + 1, step):
        for y in range(start, stop + 1, step):
            turtle.goto(x * BASE_UNIT, y * BASE_UNIT)
            turtle.stamp()
            turtle.left(45)
            turtle.stamp()

alex = Turtle(shape="square")
alex.shapesize(8)
alex.color("red")
alex.penup()

tessellate(alex, -12, 12, 12)

tess = Turtle(shape="square")
tess.shapesize(4)
tess.color("gold")
tess.penup()

tessellate(tess, -6, 6, 12)

screen = Screen()

screen.exitonclick()

输出

enter image description here

海龟邮票自然地旋转和缩放哪些龟图没有!

你会注意到的一点是我的模式并不完全相同。在原版中,组成的两个红色(或黄色)正方形的大小不同!它们稍微不同,使模式有效 - 我把它作为OP的练习来纠正这个。

答案 2 :(得分:1)

学习如何编写函数;这是一个很好的起点。编写一个函数来绘制给定大小的正方形,假设乌龟目前处于起始点并面向正确的方向。然后将方形绘制循环放在函数中:

def draw_square(tortuga, size):
    for i in range(4):
        tortuga.fd(size)
        tortuga.lt(90)

这将从主代码中删除图纸详细信息。

接下来你要做的就是编写更多通用代码,让Tess跟随Alex到正确的位置 - 或者让Alex在完成第一个方格后移动,自己做第二个方格。