python利用《深奥的简洁》一书中的方法画Sierpinski三角形

写在前面

最近听了樊登老师讲的《深奥的简洁》这本书,里面讲了一个画Sierpinski三角形的方法,这个方法我大概分了三步:
第一步:平面上任意画一个三角形,令这个三角形的三个点分别是点1,点2,点3。
第二部:在平面上再找一个点,令其为点0。
第三步:在数字1,2,3中随机抽一个数字,假如第一次抽到1(或2或3),则取三角形的点1(或点2或点3)和点0的中心点,令这个中心点为点c,然后再在数字1,2,3中随机抽一个数字,假如这一次抽到2(或1或3),则取三角形的点2(或点1或点3)和点c的中心点,再令这个中心点为新的点c。然后将随机抽数→取中心点→令中心点为新的点c→随机抽数→…这一步重复无限多次后,会出现Sierpinski三角形。

我感觉很神奇,就用python模拟了一遍,想着能画出来就画出来,画不出来也无所谓。没想到真的画出来了。

代码

#encoding=utf-8
import random
import matplotlib.pyplot as plt
import numpy as np
'''
spot_1, spot_2, spot_3是三个点的坐标,它们构成一个三角形
zeroSpot是平面上再找的一个点的坐标
'''
spot_1 = (0, 0)
spot_2 = (80, 0)
spot_3 = (50, 50)
zeroSpot = (20, 20)

# 这个方法是输入两个点,返回这两个点的中心点的坐标
def centerSpot(spotOne, spotTwo):
    x = (spotOne[0] + spotTwo[0]) / 2
    y = (spotOne[1] + spotTwo[1]) / 2
    return (x, y)

# 初始化现有点的x轴坐标
# 初始化现有点的y轴坐标
x_label = [spot_1[0], spot_2[0], spot_3[0], zeroSpot[0]]
y_label = [spot_1[1], spot_2[1], spot_3[1], zeroSpot[1]]

cspot = zeroSpot
# 将随机抽数→取中心点→令中心点为新的点c→随机抽数→......这一步重复10000次
for i in range(10000):
    ran = random.choice([1, 2, 3])
    if ran == 1:
        cspot = centerSpot(spot_1, cspot)
    elif ran == 2:
        cspot = centerSpot(spot_2, cspot)
    else:
        cspot = centerSpot(spot_3, cspot)
    x_label.append(cspot[0])
    y_label.append(cspot[1])

x_label = np.array(x_label)
y_label = np.array(y_label)

# 绘图
plt.plot(x_label, y_label, '.', linewidth='1')
plt.show()

结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值