最近不少读者对 python 的 turtle 库比较感兴趣,用python画一朵玫瑰给你,之前也写了一篇文章讲过如何画一朵玫瑰花。今天在知乎上找了一个用 turtle 画树的 python 程序,一起来看看。
其实这种程序,主要了解下大概思路即可,有兴趣的可以去熟悉下 turtle 中每个函数的使用方法和作用,我在画玫瑰花那篇文章中也有过一些介绍,大家可以对照参考下。
我先说下画这棵树的大致思路,首先这幅画可以分两大部分,一部分是树,一部分是地上的花瓣,重点是怎么画树。树又可以分为树叶和树枝,每个树枝最多分两个树杈,树叶有两种颜色。
树枝的粗细我们可以通过画笔的大小来控制,树叶的颜色我们可以使用画笔的颜色来控制,这样一来,我们只需要确认好每个位置画笔的大小和颜色即可。
不同的树枝或者不同的树叶都可以由相同的方法来实现,只是位置不一样而已,所以在程序上我们使用递归来实现,通过递归生成大量的树枝和树叶,每次递归都会在不同位置生成树枝和树叶。
树下的花瓣就容易了,直接一个循环就能搞定,每次循环画笔上下左右都随机移动一些距离即可。
下面贴出画树枝树叶的代码,大家可以对照上面提供的思路看看,完整的代码还请在本公众号后台回复关键字 "树" 获取。
#python 画树的主要实现方法
#branchLen 表示树枝的长度,t 表示turtle对象
def tree(branchLen, t):
if branchLen > 2:
if 8 <= branchLen <= 12:
if random.randint(0, 2) == 0:
t.color('snow')
else:
t.color('lightcoral')
t.pensize(branchLen / 3)
elif branchLen < 8:
if random.randint(0, 1) == 0:
t.color('snow')
else:
t.color('lightcoral')
t.pensize(branchLen / 2)
else:
t.color('sienna')
t.pensize(branchLen / 10)
t.forward(branchLen)
a = 1.5 * random.random()
t.right(20*a)
b = 1.5 * random.random()
tree(branchLen-10*b, t)
t.left(40*a)
tree(branchLen-10*b, t)
t.right(20*a)
t.up()
t.backward(branchLen)
t.down()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。