[英]Recursive fractal square in wrong area
我正在寫一個分形正方形的代碼。 我具有繪制正方形的功能,這就是我得到的: 單擊此處,但這是我想要達到的目的: 單擊此處 。 我認為我的問題不是正確放置我的坐標,但我可能完全錯了。 這是我的代碼:
#setting up stuff Code by Angel M. Gonzalez
import turtle
window = turtle.Screen()
square = turtle.Pen()
square.speed(0)
square.penup()
square.goto(0,0)
square.pendown()
square.color("black", "red")
#defining my function to make what i want
def pattern(length, depth, x, y):
square.goto(0,0)
if depth > 1:
square.begin_fill()
square.forward(length)
square.left(90)
square.forward(length)
square.left(90)
square.forward(length)
square.left(90)
square.forward(length)
square.end_fill()
pattern(length/2.2, depth -1, 1,1)
pattern(length/4.4, depth -1, 1.5,1.5)
#run my function
pattern(300, 4, 0,0)
#exit
turtle.exitonclick()
就像我之前說的,我不知道坐標是否在此處錯誤放置,或者我是否完全丟失了某些東西。 我會說我對原始正方形的功能很好。
您的遞歸方法是完全錯誤的。 您不能在遞歸中使用絕對定位:
square.goto(0,0)
...
pattern(length/4.4, depth -1, 1.5,1.5)
一切都必須與您所在的位置有關。 另外,要制作像這樣的遞歸圖形,您的遞歸函數應該使烏龜保持與進入遞歸函數時相同的狀態(位置和標題),以便調用者知道它的位置。
對於此設計,您不能簡單地先繪制一個正方形然后遞歸,而是需要在繪制時在正方形的每個角處遞歸。
作為一個簡單的初始練習,讓我們僅繪制此形狀的線條並忽略填充。 這可能不會直接導致解決方案,但將證明上述原理:
from turtle import Turtle, Screen
def pattern(length, depth):
if depth < 1:
return
# assume we're at the center of square, move to corner
turtle.penup()
turtle.backward(length / 2)
turtle.left(90)
turtle.backward(length / 2)
turtle.right(90)
turtle.pendown()
for _ in range(4):
pattern(length / 2.2, depth - 1) # recurse at each corner
turtle.forward(length)
turtle.left(90)
# return to center of square for the benefit of caller
turtle.penup()
turtle.forward(length / 2)
turtle.left(90)
turtle.forward(length / 2)
turtle.right(90)
turtle.pendown()
screen = Screen()
turtle = Turtle()
turtle.speed('fastest')
pattern(100, 4)
turtle.hideturtle()
screen.exitonclick()
OUTPUT
現在出現了以下問題:既要填充這些正方形,又要確保圖案中的右上角正方形始終位於“下方”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.