在Python海龟图形中创建正方形和旋转正方形的更简单方法

在Python海龟图形中创建正方形和旋转正方形的更简单方法,python,turtle-graphics,Python,Turtle Graphics,我正在使用turtle graphics重新创建此图案: 这可能是一个非常基本的问题,但有没有更简单的方法让我在正方形中创建旋转的正方形?事实上,我只是用一只乌龟做一个正常的正方形,然后慢慢地移动第二只乌龟到适当的位置来画旋转的部分。例: import turtle alex = turtle.Turtle() tess = turtle.Turtle() for i in range(4): alex.fd(50) alex.lt(90) tess.pu() tess.fd(

我正在使用turtle graphics重新创建此图案:

这可能是一个非常基本的问题,但有没有更简单的方法让我在正方形中创建旋转的正方形?事实上,我只是用一只乌龟做一个正常的正方形,然后慢慢地移动第二只乌龟到适当的位置来画旋转的部分。例:

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)
这对我来说是笨重的,如果我改变边长(我打算这样做)就不起作用

非常感谢

现在是开始使用函数的好时机!使用函数,您可以创建可重复执行特定任务的可重用代码块,例如,绘制正方形或正方形形状的正方形

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

def square(此边长):
对于范围(4)中的i:
此长度为.fd(边长)
这只乌龟。lt(90)
现在,让我们在代码中使用新方法:

square(亚历克斯,50岁)
苔丝·普()
tess.fd(25)
苔丝·rt(90)
苔丝·菲德(10)
泰丝·rt(225)
tess.pd()
广场(苔丝,50岁)
从这里,您可以考虑如何制作一个
星形
函数,该函数可以制作任意给定大小的“正方形中的正方形”形状。祝你好运

下面是关于如何使用函数的更详细说明:(我想这是您已经在学习的教程!)

现在是开始使用函数的好时机!使用函数,您可以创建可重复执行特定任务的可重用代码块,例如,绘制正方形或正方形形状的正方形

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

def square(此边长):
对于范围(4)中的i:
此长度为.fd(边长)
这只乌龟。lt(90)
现在,让我们在代码中使用新方法:

square(亚历克斯,50岁)
苔丝·普()
tess.fd(25)
苔丝·rt(90)
苔丝·菲德(10)
泰丝·rt(225)
tess.pd()
广场(苔丝,50岁)
从这里,您可以考虑如何制作一个
星形
函数,该函数可以制作任意给定大小的“正方形中的正方形”形状。祝你好运


下面是关于如何使用函数的更详细说明:(我想这是您已经在学习的教程!)

学习如何编写函数;这是一个很好的起点。写一个函数来画一个给定大小的正方形,假设海龟现在在起点并且朝向正确的方向。然后将方形绘图循环放入函数中:

def draw_square(tortuga, size):
    for i in range(4):
        tortuga.fd(size)
        tortuga.lt(90)
这将从主代码中删除图形详细信息


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

学习如何编写函数;这是一个很好的起点。写一个函数来画一个给定大小的正方形,假设海龟现在在起点并且朝向正确的方向。然后将方形绘图循环放入函数中:

def draw_square(tortuga, size):
    for i in range(4):
        tortuga.fd(size)
        tortuga.lt(90)
这将从主代码中删除图形详细信息


接下来要做的是编写更通用的代码,让Tess跟随Alex到合适的位置,或者让Alex在完成第一个方块后移动,自己做第二个。

我将建议一种与你和其他答案相反的方法,这些答案过于专注于画正方形,需要花费太多的工作才能完成。因为这是一个重复的模式,我认为冲压是一个方向,就像现实生活中的重复模式一样。具体而言:

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()
输出

海龟邮票自然地旋转和缩放,而海龟画却没有


有一件事你会注意到,我的模式不太一样。在原版中,组成一颗星的两个红色(或黄色)正方形的大小不一样!它们在使图案起作用方面稍有不同——我把它留作OP的练习来纠正这一点。

我将建议一种与你的和其他答案相反的方法,这些方法过于专注于绘制正方形,需要花费太多的工作才能完成。因为这是一个重复的模式,我认为冲压是一个方向,就像现实生活中的重复模式一样。具体而言:

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()
输出

海龟邮票自然地旋转和缩放,而海龟画却没有


有一件事你会注意到,我的模式不太一样。在原版中,组成一颗星的两个红色(或黄色)正方形的大小不一样!为了使模式正常工作,它们略有不同——我把它作为一个练习留给OP来纠正这一点。

谢谢,谢谢!我设法解决了大小差异的问题,通过使用更多的函数,第一个大的和小的正方形被画出来,然后稍微大一点的版本,旋转,被放在上面。现在我被困在尝试允许不同的形状大小/缩放!谢谢,谢谢!!我设法解决了大小差异的问题,通过使用更多的函数,第一个大的和小的正方形被画出来,然后稍微大一点的版本,旋转,被放在上面。现在我被困在尝试允许不同的形状大小/缩放!