📜  使用Python 的雪花分形

📅  最后修改于: 2022-05-13 01:57:14.261000             🧑  作者: Mango

使用Python 的雪花分形

使用Python编程创建雪花分形

什么是分形

分形是一种永无止境的模式。分形是无限复杂的模式,在不同的尺度上都是自相似的。它们是通过在持续的反馈循环中一遍又一遍地重复一个简单的过程来创建的。在递归的驱动下,分形是动态系统的图像——混沌的图像。

什么是Python的海龟编程?

海龟图形是向孩子们介绍编程的流行方式。它是 1966 年由 Wally Feurzig 和 Seymour Papert 开发的原始 Logo 编程语言的一部分。



想象一只机器乌龟从 xy 平面的 (0, 0) 开始。在导入海龟之后,给它命令turtle.forward(15),它会在它面向的方向上移动(在屏幕上!)15 个像素,并在移动时画一条线。给它命令turtle.right(25),它就地顺时针旋转25度。

通过将这些和类似的命令组合在一起,可以轻松绘制复杂的形状和图片。

海龟模块是从Python标准发行版到Python 2.5 版本的同名模块的扩展重新实现。

它试图保持旧乌龟模块的优点并(几乎)100% 兼容它。这首先意味着在使用 -n 开关从 IDLE 运行中使用模块时,让正在学习的程序员能够以交互方式使用所有命令、类和方法。

海龟模块以面向对象和面向过程的方式提供海龟图形基元。因为它使用 Tkinter 作为底层图形,所以它需要一个安装了 Tk 支持的Python版本。

此Python代码允许您使用其用于 GUI 设计的标准库 Turtle 来创建雪花设计。这段代码在屏幕的随机位置创建了 20 个(您可以在源代码中更改它)随机大小和颜色的雪花。

# Python code to draw snowflakes fractal.
import turtle
import random
  
# setup the window with a background color
wn = turtle.Screen()
wn.bgcolor("cyan")
  
# assign a name to your turtle
elsa = turtle.Turtle()
elsa.speed(15)
  
# create a list of colours
sfcolor = ["white", "blue", "purple", "grey", "magenta"]
  
# create a function to create different size snowflakes
def snowflake(size):
  
    # move the pen into starting position
    elsa.penup()
    elsa.forward(10*size)
    elsa.left(45)
    elsa.pendown()
    elsa.color(random.choice(sfcolor))
  
    # draw branch 8 times to make a snowflake
    for i in range(8):
        branch(size)   
        elsa.left(45)
      
  
# create one branch of the snowflake
def branch(size):
    for i in range(3):
        for i in range(3):
            elsa.forward(10.0*size/3)
            elsa.backward(10.0*size/3)
            elsa.right(45)
        elsa.left(90)
        elsa.backward(10.0*size/3)
        elsa.left(45)
    elsa.right(90) 
    elsa.forward(10.0*size)
  
# loop to create 20 different sized snowflakes 
# with different starting co-ordinates
for i in range(20):
    x = random.randint(-200, 200)
    y = random.randint(-200, 200)
    sf_size = random.randint(1, 4)
    elsa.penup()
    elsa.goto(x, y)
    elsa.pendown()
    snowflake(sf_size)
  
# leave the window open until you click to close  
wn.exitonclick()  

输出: