在Python海龟图形中创建正方形和旋转正方形的更简单方法
我正在使用turtle graphics重新创建此图案: 这可能是一个非常基本的问题,但有没有更简单的方法让我在正方形中创建旋转的正方形?事实上,我只是用一只乌龟做一个正常的正方形,然后慢慢地移动第二只乌龟到适当的位置来画旋转的部分。例:在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(
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来纠正这一点。谢谢,谢谢!我设法解决了大小差异的问题,通过使用更多的函数,第一个大的和小的正方形被画出来,然后稍微大一点的版本,旋转,被放在上面。现在我被困在尝试允许不同的形状大小/缩放!谢谢,谢谢!!我设法解决了大小差异的问题,通过使用更多的函数,第一个大的和小的正方形被画出来,然后稍微大一点的版本,旋转,被放在上面。现在我被困在尝试允许不同的形状大小/缩放!