• python 算法 day3


     谢尔宾斯基三角形

    展示的一个是三向递归的算法:从单个的大三角形开始,取它的各边中点作三条中位线,这样就把它分成了四个新的三角形;剔除掉这四个新三角形中最中间的那个,

    对其余三个角上的三角形重复以上的操作

    设置结束条件可以设置为我们想划分三角形的次数

    import turtle
    import time
    def drawTriangle(points,color,myTurtle):
        myTurtle.fillcolor(color)
        myTurtle.up() #防止出现多余的线
        myTurtle.goto(points[0][0],points[0][1])
        myTurtle.down()
        myTurtle.begin_fill()
        myTurtle.goto(points[1][0],points[1][1])
        myTurtle.goto(points[2][0],points[2][1])
        myTurtle.goto(points[0][0],points[0][1])
        myTurtle.end_fill()
        time.sleep(5)
    def getMid(a,b):
        return ((a[0]+b[0])/2 , (a[1] + b[1])/2)
    
    def sierpinsk(points,degree,myTurtle):
        colormap = ["blue","red","green","white","yellow","orange","violet"]
        drawTriangle(points,colormap[degree],myTurtle)
        if degree > 0:
            sierpinsk([points[0],getMid(points[0],points[1]),getMid(points[0],points[2])],degree-1,myTurtle)
            print("i am ready")
            sierpinsk([points[1],getMid(points[0],points[1]),getMid(points[1],points[2])],degree-1,myTurtle)
            sierpinsk([points[2],getMid(points[2],points[1]),getMid(points[0],points[2])],degree-1,myTurtle)
            print("this is me")
    def main():
        myTurtle = turtle.Turtle()
        mtwin = turtle.Screen()
        mypoints = [[-100,-50],[0,100],[100,-50]]
        sierpinsk(mypoints,3,myTurtle)
        mtwin.exitonclick()
    main()

    Sierpinski函数做的第一件事就是画外面最大的三角形,然后有三个递归调用,递归总是先处理左下角的三角形 然后处理中间的三角形,最后处理右边的三角形  getMId函数提取两个参数作为端点,然后返回两个端点组成的线段的中点

  • 相关阅读:
    css 分类+选择器
    emmet语法
    程序员能力矩阵
    时间管理

    java 内存 解析
    SQL 查询优化
    2016 书单计划
    ssh框架;
    Mybatis;
  • 原文地址:https://www.cnblogs.com/suizhixxie/p/10394530.html
Copyright © 2020-2023  润新知