python教你画一棵树


最近不少读者对 python 的 turtle 库比较感兴趣,用python画一朵玫瑰给你,之前也写了一篇文章讲过如何画一朵玫瑰花。今天在知乎上找了一个用 turtle 画树的 python 程序,一起来看看。



其实这种程序,主要了解下大概思路即可,有兴趣的可以去熟悉下 turtle 中每个函数的使用方法和作用,我在画玫瑰花那篇文章中也有过一些介绍,大家可以对照参考下。


我先说下画这棵树的大致思路,首先这幅画可以分两大部分,一部分是树,一部分是地上的花瓣,重点是怎么画树。树又可以分为树叶和树枝,每个树枝最多分两个树杈,树叶有两种颜色。


树枝的粗细我们可以通过画笔的大小来控制,树叶的颜色我们可以使用画笔的颜色来控制,这样一来,我们只需要确认好每个位置画笔的大小和颜色即可。


不同的树枝或者不同的树叶都可以由相同的方法来实现,只是位置不一样而已,所以在程序上我们使用递归来实现,通过递归生成大量的树枝和树叶,每次递归都会在不同位置生成树枝和树叶。


树下的花瓣就容易了,直接一个循环就能搞定,每次循环画笔上下左右都随机移动一些距离即可。


下面贴出画树枝树叶的代码,大家可以对照上面提供的思路看看,完整的代码还请在公众号【谭某人】后台回复关键字 "树" 获取。


#python 画树的主要实现方法 #branchLen 表示树枝的长度,t 表示turtle对象 def tree(branchLen, t):    
    if branchLen > 2:
        if 8 <= branchLen <= 12:
            if random.randint(02) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')
            t.pensize(branchLen / 3)
        elif branchLen < 8:
            if random.randint(01) == 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() 
	


关键词: python

网友留言(0条)

发表评论