Python简单画一棵树代码
本文将从多个方面对Python简单画一棵树的代码进行详细的阐述。
一、使用turtle模块画树
Python标准库中的turtle模块可以用于绘制图形,其中也包括画树。下面是一个简单的例子:
import turtle def draw_tree(level, branch_len): if level > 0: turtle.forward(branch_len) turtle.right(20) draw_tree(level-1, branch_len-10) turtle.left(40) draw_tree(level-1, branch_len-10) turtle.right(20) turtle.backward(branch_len) turtle.left(90) draw_tree(5, 70) turtle.exitonclick()
上面的代码使用了递归的思想,每一次递归就画出了一段树枝,然后向右旋转20度,再递归画出左子树和右子树,最后向左旋转40度,回到上一个节点。
二、改进turtle模块画树
上面的代码画出来的树比较单一,现在我们想要使得画出来的树更多变,可以对其进行修改。
import turtle import random def draw_tree(level, branch_len): if level > 0: angle = random.randint(20, 45) sub_len = random.randint(10, 15) turtle.pensize(level) turtle.forward(branch_len) turtle.right(angle) draw_tree(level-1, branch_len-sub_len) turtle.left(angle*2) draw_tree(level-1, branch_len-sub_len) turtle.right(angle) turtle.backward(branch_len) turtle.left(90) turtle.penup() turtle.goto(0, -150) turtle.pendown() turtle.color("green") draw_tree(10, 120) turtle.exitonclick()
上面的代码使用了随机数,使得每一次画树的时候都会有一定的变化。同时,修改了线条的粗细,以及弧度的变化,使得树干和树枝看起来更加自然流畅。
三、使用Pygame模块画树
除了turtle模块外,Python还有其他的绘图模块,如Pygame。下面是使用Pygame模块画树的代码:
import pygame, time, random, math scr_w, scr_h = 600, 600 pygame.init() screen = pygame.display.set_mode((scr_w, scr_h)) pygame.display.set_caption("Fractal Tree") def draw_tree(screen, level, x1, y1, angle, branch_length, branch_width): if level <= 0: return x2 = x1 + int(math.cos(math.radians(angle)) * branch_length * level) y2 = y1 - int(math.sin(math.radians(angle)) * branch_length * level) pygame.draw.line(screen, (255, 255, 255), (x1, y1), (x2, y2), branch_width) draw_tree(screen, level-1, x2, y2, angle-random.randint(30, 45), branch_length, branch_width-1) draw_tree(screen, level-1, x2, y2, angle+random.randint(30, 45), branch_length, branch_width-1) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() screen.fill((0,0,0)) draw_tree(screen, 10, scr_w//2, scr_h-50, -90, 10, 10) pygame.display.flip() time.sleep(0.01)
上面的代码通过调用Pygame的绘图函数,可以画出更加复杂、美观的树。其中,draw_tree
函数使用递归的思想,根据树的层数和角度等参数来画出一棵树。
四、使用turtle和L-System画树
L-System是一种形式语言,用来描述自然界中的一些规律。可以用L-System来生成树的形状,并通过turtle模块将其画出来。下面是一个使用turtle和L-System画树的例子:
import turtle def apply_rules(char, rules): if char not in rules: return char return rules[char] def process_string(init_str, rules): return ''.join([apply_rules(ch, rules) for ch in init_str]) def draw_l_system(turtle, instructions, angle, distance): for cmd in instructions: if cmd == 'F': turtle.forward(distance) elif cmd == '+': turtle.right(angle) elif cmd == '-': turtle.left(angle) def create_l_system(iterations, axiom, rules): init_str = axiom for i in range(iterations): init_str = process_string(init_str, rules) return init_str def draw_tree(turtle, instructions, angle, distance): for i in instructions: if i == 'F': turtle.pendown() turtle.forward(distance) elif i == '+': turtle.right(angle) elif i == '-': turtle.left(angle) elif i == '[': turtle.penup() elif i == ']': turtle.pendown() axiom = 'X' rules = {'X': 'F-[[X]+X]+F[+FX]-X', 'F': 'FF'} tree = create_l_system(5, axiom, rules) turtle.left(90) turtle.penup() turtle.goto(0, -200) turtle.pendown() draw_tree(turtle, tree, 25, 8) turtle.exitonclick()
上面的代码使用了L-System的思想,将树的形状描述成了一个字符串。然后根据字符串中的字符来判断应该执行哪些行动,画出一棵树。
五、总结
本文介绍了使用Python画树的几种方法,包括turtle模块、Pygame模块和L-System等。