购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.7 完整代码

下面是绘制科赫雪花的完整代码: CJZgxG5YXmSIZrF6y2jSOLUDt/rNEj2rHFwCRTKRJpUbWKaHfeG1nQLYnWqeJzef

"""
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()
点击中间区域
呼出菜单
上一章
目录
下一章
×