循环方法:绘制谢尔平斯基三角形(python)

        今天,数据结构课上,老师留了个匪夷所思的作业,就是用非递归的方法去实现谢尔平斯基三角形。

from turtle import *


def drawTriangle(points, color, myTurtle):
    myTurtle.fillcolor(color)
    myTurtle.up()
    myTurtle.goto(points[0])
    myTurtle.down()
    myTurtle.begin_fill()
    myTurtle.goto(points[1])
    myTurtle.goto(points[2])
    myTurtle.goto(points[0])
    myTurtle.end_fill()


def getMid(p1, p2):

    return( (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)


def sierpinski(points, degree, myTurtle):
    colormap = ['#FFEBCD', '#00FFFF', '#B8860B', '#FF8C00', '#00BFFF', '#FF00FF', '#FFD700']
    drawTriangle(points, colormap[degree], myTurtle)
    if degree > 0:
        # 递归方法
        # sierpinski([points[0],
        #     getMid(points[0], points[1]),
        #     getMid(points[0], points[2])],
        #     degree-1, myTurtle)
        # sierpinski([points[1],
        #             getMid(points[0], points[1]),
        #             getMid(points[1], points[2])],
        #            degree - 1, myTurtle)
        # sierpinski([points[2],
        #             getMid(points[2], points[1]),
        #             getMid(points[0], points[2])],
        #            degree - 1, myTurtle)
        n = 0
        flag = 0
        left = 0
        for i in range(3):
            sierpinski([points[n],
                        # 0 0 2 and 0 1 0
                        getMid(points[flag], points[1]),
                        getMid(points[left], points[2])],
                       degree-1, myTurtle)
            n += 1
            if n == 2:
                flag = 2
            else:
                flag = 0
            if n == 1:
                left = 1
            else:
                left = 0


myTurtle = Turtle()
myWin = myTurtle.getscreen()
myPoints = [(-200, -100), (0, 200), (200, -100)]
sierpinski(myPoints, 4, myTurtle)

这里做了个笨方法完成了三层结构的谢尔平斯基三角形。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天海一直在AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值