Python使用遞歸繪制謝爾賓斯基三角形


謝爾賓斯基三角形使用了三路遞歸算法,從一個大三角形開始,通過連接每一個邊的中點,將大三角型分為四個三角形,然后忽略中間的三角形,依次對其余三個三角形執行上述操作。

運行效果:

 

源代碼:

 1 import turtle  2 
 3 
 4 def draw_triangle(points, color, my_angle):  5  my_angle.fillcolor(color)  6  my_angle.up()  7     my_angle.goto(points[0][0], points[0][1])  8  my_angle.down()  9  my_angle.begin_fill() 10     my_angle.goto(points[1][0], points[1][1]) 11     my_angle.goto(points[2][0], points[2][1]) 12     my_angle.goto(points[0][0], points[0][1]) 13  my_angle.end_fill() 14 
15 
16 def get_mid(p1, p2): 17     return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2) 18 
19 
20 def sierpinski(points, degree, my_angle): 21     colormap = ['blue', 'red', 'green', 'yellow', 22                 'violet', 'orange', 'white'] 23  draw_triangle(points, colormap[degree], my_angle) 24     if degree > 0: 25  sierpinski([points[0], 26                     get_mid(points[0], points[1]), 27                     get_mid(points[0], points[2])], 28                    degree - 1, my_angle) 29         sierpinski([points[1], 30                     get_mid(points[0], points[1]), 31                     get_mid(points[1], points[2])], 32                    degree - 1, my_angle) 33         sierpinski([points[2], 34                     get_mid(points[2], points[1]), 35                     get_mid(points[0], points[2])], 36                    degree - 1, my_angle) 37 
38 
39 my_turtle = turtle.Turtle() 40 my_win = turtle.Screen() 41 my_points = [[-100, -50], [0, 100], [100, -50]] 42 sierpinski(my_points, 3, my_turtle) 43 my_win.exitonclick()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM