Ковер Серпинского Рекурсия - Питон



Мне нужна помощь с программой на python. В моем CPS II классе мы обсуждали, как создать треугольник Серпинского с помощью рекурсии. Я подумал, что это довольно интересно, и изучил еще несколько тем в интернете. Я пытался придумать код для создания ковра Серпинского с помощью рекурсии. Я чувствую, что я близко, но не могу, кажется, получить его полностью. Я понятия не имею, в чем тут проблема.



И прежде чем кто-нибудь спросит, это не домашнее задание. Я просто пытаюсь ... лучше поймите рекурсию, практикуясь с примерами.

Вот мой код до сих пор; он работает только на глубине 1. И тогда на глубине 2 это вроде как работает, но что-то не так.



from graphics import *
import sys

def sierpinskiCarpet(points, level, window):

if level == 0:
square = Rectangle(points[0], points[1])
square.draw(window)
else:
x_0 = (points[0].getX())
x_02 = (points[1].getX())
x_1 = ((points[1].getX())/3)
x_2 = (((points[1].getX())/3)*2)

y_0 = (points[0].getY())
y_02 = (points[1].getY())
y_1 = ((points[0].getY())/3)
y_2 = (((points[0].getY())/3)*2)


top1 = [points[0], Point(x_1, y_2)]
top2 = [Point(x_1, y_0), Point(x_2, y_2)]
top3 = [Point(x_2, y_0), Point(x_02, y_2)]

med1 = [Point(x_0, y_2), Point(x_1, y_1)]
med3 = [Point(x_2, y_2), Point(x_02, y_1)]

bottom1 = [Point(x_0, y_1), Point(x_1, y_02)]
bottom2 = [Point(x_1, y_1), Point(x_2, y_02)]
bottom3 = [Point(x_2, y_1), points[1]]


sierpinskiCarpet(top1, level - 1, window)
sierpinskiCarpet(top2, level - 1, window)
sierpinskiCarpet(top3, level - 1, window)
sierpinskiCarpet(med1, level - 1, window)
sierpinskiCarpet(med3, level - 1, window)
sierpinskiCarpet(bottom1, level - 1, window)
sierpinskiCarpet(bottom2, level - 1, window)
sierpinskiCarpet(bottom3, level - 1, window)


def main():
#get the depth from the system arguemtns
depth = int(sys.argv[1])
#set up the window using GraphWin
window = GraphWin('Sierpinski Carpet', 500, 500)
#set the corrdiantes of the window
window.setCoords(-0.1, -0.1, 1.1, 1.1)
#list the starting points for the first square
points = [Point(0, 1), Point(1, 0)]

#call the function with the points
sierpinskiCarpet(points, depth, window)
#close the window when clicked
window.getMouse()

main()
722   1  

1 ответ:

X_1, x_2, y_1 и y_2 должны иметь в своей формуле как точечные[0], так и точечные[1] части.

x_0 = (points[0].getX())
x_02 = (points[1].getX())
x_1 = (((points[0].getX())/3)*2 +  (points[1].getX())/3)
x_2 = (((points[0].getX())/3)   + ((points[1].getX())/3)*2)

И, конечно, та же идея из y.

Comments

    Ничего не найдено.