0

目標

ここに画像の説明を入力

import graphics
def main():
    window = graphics.GraphWin("x", 600, 400)
    cntr = graphics.Point(300,200)
    size = 200
    wrapdiamond(size, window,cntr)
    window.getMouse()
def wrapdiamond(size, window,cntr):
    count = 0
    if count == 4:
        return
    if count < 4:
        diamond(size,window,"black", cntr)
        x= cntr.getX()+-0.5*size
        y = cntr.getY()+-0.5*size
        cntr= graphics.Point(x,y)
        size = size*0.33
        count +=1
        diamond(size,window,"black", cntr)

def diamond(size,window,color,cntr):
    p1 = cntr.clone()
    p1.move(0,-0.5*size)
    x1 = p1.getY()
    newcntr = graphics.Point(300,x1)
    p2 = cntr.clone()
    p2.move(-0.5*size,0)
    p3 = cntr.clone()
    p3.move(0,0.5*size)
    p4 = cntr.clone()
    p4.move(0.5*size,0)
    diamond= graphics.Polygon(p1, p2, p3, p4)
    diamond.setFill("black")
    diamond.draw(window)

だから上の写真が私の目標です。これを再帰的に (同じ関数を呼び出して) 行う必要があり、中心点、サイズ、色をシフトします。私の現在の方法では、これの多くをハードコーディングする可能性が非常に高いと感じています。これを再帰的に実装するにはどうすればよいですか?

4

2 に答える 2

0

再帰に行き詰まっている場合は、これでやり直すことができます

def rdraw(x,y,level=1,max_level=5):
    draw_diamond(level)
    d = distance(level)
    if (level+1)<=max_level:
        rdraw(x+d,y+d,level+1)
        rdraw(x+y,y-d,level+1)
        rdraw(x-y,y+d,level+1)
        rdraw(x-y,y-d,level+1)

rdraw(0,0)
于 2014-11-23T01:03:38.050 に答える