Python 中的分形树


分形模式无处不在,在大自然中。就像蕨叶的一个小树枝与蕨叶本身很相似。或是一颗鹅卵石经常像一座山!所以利用小模式的重复来生成大模式的这个想法就叫作分形树。在 Python 编程中,也可以使用各种可用模块来生成分形树。

使用 pygame 模块

该模块为我们提供了生成分形树所需的功能。在这里,我们首先定义屏幕布局大小,然后定义模式重复自身的深度。递归在这里起很大作用,因为我们要重复相同的模式,直到某个深度。

示例

import pygame, math

pygame.init()
screen = pygame.display.set_mode((750, 650))
pygame.display.set_caption("Fractal Tree")
display = pygame.display.get_surface()

def drawTree(a, b, pos, deepness):
if deepness:
c = a + int(math.cos(math.radians(pos)) * deepness * 10.0)
d = b + int(math.sin(math.radians(pos)) * deepness * 10.0)
pygame.draw.line(display, (127,255,0), (a, b), (c, d), 1)
drawTree(c, d, pos - 25, deepness - 1)
drawTree(c, d, pos + 25, deepness- 1)

def process(event):
if event.type == pygame.QUIT:
exit(0)

drawTree(370, 650, -90, 10)
pygame.display.flip()
while True:
process(pygame.event.wait())

输出

运行上面的代码会得到以下结果

使用 Turtle

使用 turtle 模块,我们可以遵循类似的方法。此处,turtle 程序开始绘制树枝作为重复的模式,只需更改绘制的方向即可。我们定义功能重复自身时的角度,然后得到完整的树。

示例

import turtle
def tree(Length,n):
   if Length > 10:
      n.forward(Length)
      n.right(25)
      tree(Length-15,n)
      n.left(50)
      tree(Length-15,n)
      n.right(25)
      n.backward(Length)

def function():
   n = turtle.Turtle()
   data = turtle.Screen()
   n.left(90)
   n.up()
   n.backward(100)
   n.down()
   n.color("green")
   tree(85,n)
   data.exitonclick()

function()

输出

运行上面的代码会得到以下结果

更新于: 2020 年 1 月 2 日

770 次浏览

开启您的职业生涯

完成课程获得认证

开始
广告