2016-12-06 122 views
0

我的乌龟图形努力重建这个模式旋转方:enter image description here,使一个正方形和更简单的方法在Python乌龟图形

这可能是一个很基本的问题,但有一个简单的办法,我在方形内创建旋转的正方形?就这样,我只用一只乌龟制作一个正方形,然后慢慢地将第二只乌龟移动到绘制旋转部分的位置。例如:

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

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

让我们拿你的代码并添加一个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) 

从这里然后你可以考虑如何制作一个功能,它可以制作任何给定尺寸的“方形”形状。祝你好运!

这里是你如何使用功能的详细的解释:http://openbookproject.net/thinkcs/python/english3e/functions.html(!我怀疑这是你已经按照教程)

1

了解如何编写一个函数;这是一个很好的开始。写一个函数来绘制一个给定大小的正方形,假定乌龟目前在起始点并且面向正确的方向。然后把你的正方形绘图循环放在函数里面:

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

这将从你的主代码中移除绘图细节。

接下来你要做的是编写更多的通用代码,让苔丝跟随亚历克斯到适当的位置 - 或者让亚历克斯在完成第一个方块之后移动,自己完成第二个方块。

3

我要给你的建议一个相反的方法,其他答案太集中于正方形,这将花费太多的工作来完成。由于这是一种重复的模式,我认为冲压就是要走的路,就像现实生活中的重复模式一样。具体做法是:

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的练习来纠正这一点。

+0

谢谢,谢谢!我设法通过使用一些更多的功能来解决尺寸差异的问题,以便首先绘制大小方格,然后稍微更大的版本旋转放置在顶部。现在我被困在试图允许不同的形状尺寸/缩放! – maio123maio