
上QQ阅读APP看书,第一时间看更新
1.7 完整代码
下面是绘制科赫雪花的完整代码:
""" koch.py 一个绘制科赫雪花的程序。 开发者:Mahesh Venkitachalam """ import turtle import math #以递归的方式绘制科赫雪花 def drawKochSF(x1, y1, x2, y2, t): d = math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) r = d/3.0 h = r*math.sqrt(3)/2.0 p3 = ((x1 + 2*x2)/3.0, (y1 + 2*y2)/3.0) p1 = ((2*x1 + x2)/3.0, (2*y1 + y2)/3.0) c = (0.5*(x1+x2), 0.5*(y1+y2)) n = ((y1-y2)/d, (x2-x1)/d) p2 = (c[0]+h*n[0], c[1]+h*n[1]) if d > 10: # 第1个片段 drawKochSF(x1, y1, p1[0], p1[1], t) # 第2个片段 drawKochSF(p1[0], p1[1], p2[0], p2[1], t) # #第3个片段 drawKochSF(p2[0], p2[1], p3[0], p3[1], t) # 第4个片段 drawKochSF(p3[0], p3[1], x2, y2, t) else: # 绘制中间的角 t.up() t.setpos(p1[0], p1[1]) t.down() t.setpos(p2[0], p2[1]) t.setpos(p3[0], p3[1]) # 绘制两侧的边 t.up() t.setpos(x1, y1) t.down() t.setpos(p1[0], p1[1]) t.up() t.setpos(p3[0], p3[1]) t.down() t.setpos(x2, y2) # 函数main() def main(): print('Drawing the Koch Snowflake...') t = turtle.Turtle() t.hideturtle() # 绘制科赫雪花 try: drawKochSF(-100, 0, 100, 0, t) drawKochSF(0, -173.2, -100, 0, t) drawKochSF(100, 0, 0, -173.2, t) except: print("Exception, exiting.") exit(0) # 等用户在屏幕上单击后退出 turtle.Screen().exitonclick() # 调用函数main() if __name__ == '__main__': main()