python谢尔宾斯基三角形

1. 绘制空白的三角形

  1. 画一个绿色实心等边三角形
  2. 沿三条边中心点的连线
  3. 连好后,会多一个三角形,将这个三角形填充为白色
  4. 这个时候左 右 上 分别有三角形
  5. 对这三个小三角形重复 1,2和3 ,直到条件满足时停止
import turtle as t

# 1. 构造一个三角形,并为其填充颜色
def fun(x1,y1,x2,y2,x3,y3,c):
    t.penup()
    t.goto(x1,y1)  # 先去x1 y1这个点
    t.pendown()
    t.color(c)     # 颜色
    t.begin_fill() # 开始填充三角形
    t.goto(x2,y2)
    t.goto(x3,y3)
    t.goto(x1,y1)
    t.end_fill()   # 结束填充三角形
# 2. 画白色三角形
def fun2(x1,y1,x2,y2,x3,y3):
    if abs(x1 - x2) < 40: # 递归出口
        return
    else:
        x4,y4 = (x1 + x2)/2 ,(y1 + y2)/2
        x5,y5 = (x2 + x3)/2 ,(y2 + y3)/2
        x6,y6 = (x1 + x3)/2 ,(y1 + y3)/2
        fun(x4,y4,x5,y5,x6,y6,'white')
        fun2(x1,y1,x4,y4,x6,y6)
        fun2(x4,y4,x2,y2,x5,y5)
        fun2(x6,y6,x5,y5,x3,y3)


# 构造整三角形(也可以随机选择三个点,构造任意三角形)
x1,y1 = -100,0
x2,y2 = 100,0
x3,y3 = 0,(200*200-100*100) ** 0.5
fun(x1,y1,x2,y2,x3,y3,'green')
fun2(x1,y1,x2,y2,x3,y3)


t.ht()
t.done()

2. 绘制绿色的三角形

import turtle as t

# 构造一个三角形,并为其填充颜色
def fun(d):
    if d < 40:
        t.begin_fill()
        for i in range(3):
            t.forward(d)
            t.left(120)
        t.end_fill()
    else:
        # 绘制左下角三角形
        fun(d/2)
        # 绘制右下角三角形
        t.forward(d/2)
        fun(d/2)
        # 绘制上方三角形
        t.left(120)
        t.forward(d/2)
        t.right(120)
        fun(d/2)

        
        # 画完以后退回去(起点)
        t.left(60)
        t.backward(d/2)
        t.right(60)
# 先绘制最大的那个三角形做底板,三点的坐标定位(x1,y1) (x2,y2)  (x3,y3)
t.speed(0)

t.color('green')
fun(200)

t.ht()
t.done()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1024节

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

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

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

打赏作者

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

抵扣说明:

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

余额充值