python与分形0009 - 谢尔宾斯基地毯

分形介绍

分形是一个悖论。

它惊人的简单,却又无限的复杂。

它很新,却又比尘埃更古老。

分形是什么?它们是从哪里来的?我们为什么要在乎?

20世纪非传统的数学家Benoit Mandelbrot在1975年从拉丁词fractus(意思是不规则的或破碎的)创造了分形这个词。

我们周围到处都可以看到分形的影子。

从最基本的角度看,分形是重复模式或公式的视觉表达,开始时很简单,然后逐渐变得更复杂。

在数学中,分形是欧氏空间的子集,其分形维数严格超过其拓扑维数。

分形在不同的尺度上表现相同,如Mandelbrot集合的连续放大。

分形通常在越来越小的尺度上表现出类似的模式,这种特性称为自相似性,也称为扩展对称或展开对称。

如果这种复制在每个尺度上都完全相同,就像在门格尔海绵中一样,那么它就被称为仿射自相似。

分形几何属于度量理论的数学分支。

分形结果

24482e4ebb06c66eab5c51f98a815054.png
谢尔宾斯基地毯
c1a4b05c132910a176219d5c7d09ba3c.png
谢尔宾斯基地毯
90a8b460447151b2606436abc0a1dd70.png
谢尔宾斯基地毯
f5543da79f3bf1416d261e2e1c9675f6.png
谢尔宾斯基地毯
5f4a1b8cb8ac6ad1eeb48110267e1819.png
谢尔宾斯基地毯
9fff6af68089d880eb0fd1629d6df7b0.png
谢尔宾斯基地毯
5ee9168b6676724abdccc6a780c32d17.png
谢尔宾斯基地毯

分形源码

# coding=utf-8

import turtle
import random
import time

COLOR_TABLES = [
    ["#000000", "#000000", "#000000", "#000000" ],
    ["#00649F", "#97ECC5", "#00DBE7", "#01AAC1" ],
    ["#085F63", "#EF255F", "#FCCF4D", "#49BEB7" ],
    ["#9B5D73", "#FFF1C5", "#C38B8B", "#B0757C" ],
    ["#F0F0F0", "#FC5185", "#364F6B", "#43DDE6" ],
    ["#F67280", "#355C7D", "#6C5B7B", "#C06C84" ],
    ["#F3ECC8", "#0D1B4C", "#3F6699", "#78C2C3" ]
    ]

window = turtle.Screen()
window.screensize()
window.setup(width=1.0, height=1.0, startx=None, starty=None)

turtle.speed(0)
turtle.hideturtle()
turtle.tracer(0)
turtle.bgcolor('white')

def box(boxSize):
    turtle.begin_fill()     # 0 deg.
    turtle.forward(boxSize)
    turtle.left(90)         # 90 deg.
    turtle.forward(boxSize)
    turtle.left(90)         # 180 deg.
    turtle.forward(boxSize)
    turtle.left(90)         # 270 deg.
    turtle.forward(boxSize)
    turtle.end_fill()
    turtle.setheading(0)

def move_box(xy, length, color):
    (x, y) = xy
    turtle.color(color)
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    box(length)

def draw_all(xy, length, depth, color_table):
    if depth <= 0: return

    length3 = length / 3
    (x, y) = xy

    pos1_9 = [  (x-length3*2,       y+length+length3),
                (x+length3,         y+length+length3),
                (x+length+length3,  y+length+length3),
                (x-length3*2,       y+length3),
                (x+length+length3,  y+length3),
                (x-length3*2,       y-length3*2),
                (x+length3,         y-length3*2),
                (x+length+length3,  y-length3*2) ]    
    for pos in pos1_9:
        move_box(pos, length3, color_table[depth%len(color_table)])
        draw_all(pos, length3, depth-1, color_table)
    
def Sierpinski():
    length = 270
    start_x = -length/2
    start_y = -length/2
    depth = 3

    for color_table in COLOR_TABLES:
        move_box((start_x, start_y), length, color_table[0])
        draw_all((start_x, start_y), length, depth, color_table)
        time.sleep(1)

#time.sleep(6)
Sierpinski()

分形视频

--EOF--

例行求粉,谢谢!

97685378c828e4d837a008a4862154f7.png
求粉
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值