python与分形0009 - 谢尔宾斯基地毯
2023-03-15 22:04:04 时间
分形介绍
分形是一个悖论。
它惊人的简单,却又无限的复杂。
它很新,却又比尘埃更古老。
分形是什么?它们是从哪里来的?我们为什么要在乎?
20世纪非传统的数学家Benoit Mandelbrot在1975年从拉丁词fractus(意思是不规则的或破碎的)创造了分形这个词。
我们周围到处都可以看到分形的影子。
从最基本的角度看,分形是重复模式或公式的视觉表达,开始时很简单,然后逐渐变得更复杂。
在数学中,分形是欧氏空间的子集,其分形维数严格超过其拓扑维数。
分形在不同的尺度上表现相同,如Mandelbrot集合的连续放大。
分形通常在越来越小的尺度上表现出类似的模式,这种特性称为自相似性,也称为扩展对称或展开对称。
如果这种复制在每个尺度上都完全相同,就像在门格尔海绵中一样,那么它就被称为仿射自相似。
分形几何属于度量理论的数学分支。
分形结果
分形源码
# 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()
相关文章
- Python中的函数与方法 以及Bound Method和Unbound Method
- 一文贯通python文件读取
- Python 中的异步编程:Asyncio
- 7个你现在就该学习Python的理由
- 提高Python运行效率的六个窍门
- Python数据科学:神经网络
- 一篇文章看懂大数据分析就业前景及职能定位
- R和Python中的文本挖掘:8个入门小贴士
- 告诉你为什么Python有点慢,但我却无所谓?
- 专注学习DevOps编程语言Top 5推荐
- Python发送邮件脚本
- Python多进程并行编程实践: mpi4py 的使用
- Python语言在未来的发展前景
- Python vs Ruby: 谁是最好的 web 开发语言?
- Python对Ruby:谁在Web开发领域更胜一筹?
- Python一行代码完成并行任务
- Python开发者2017应该关注的七个类库
- python爬虫入门基本知识
- 在终端中优雅地编写Python
- Python机器学习实战:信用卡欺诈检测