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()
输出
运行上面的代码会得到以下结果
广告