在 2019 年 10 月 1 日的时候,我尝试使用海龟绘图绘制了一面五星红旗,参考我的另外一篇博文:使用海龟绘图绘制一面五星红旗 ,我觉得挺好玩的,还想进一步了解一下相关知识。后来,我又探索了一些绘图内容,发现可以绘制一些植物,例如树木、花草,核心就是要定义好绘制曲线。本文记录几个常见的植物:樱花树、火树银花、玫瑰花。
提前声明,下文中涉及的 Python
脚本已经被我上传至 GitHub
,读者可以提前下载查看:绘制植物脚本 ,脚本命名使用英文单词作为前缀。
樱花树
画樱花树的整体思路就是先绘制樱花树,再绘制地上的落叶。
其中,绘制樱花树使用了递归的方式,从主干开始绘制,绘制主干完成后分为左右两侧的枝干,不停递归绘制,对于长度比较长的枝干,仍旧按照主干的方式绘制,直到长度比较短的枝干,作为树枝末端存在,会有不同的颜色、粗细。
代码示例如下,里面包含了注释,很容易就能看懂:
1 | #!/usr/bin/env python |
运行结果如下,由于角度是随机生成的,所以每次运行结果都会不一样:
火树银花
绘制火树银花的思路和上面的樱花树一致,只不过火树银花这个名字比较酷,树枝没有区分粗细,只区分长度、颜色,整个画面采用黑色背景,看起来非常闪耀。
需要注意的是,运行一次耗时比较长,大概需要 4-5 分钟。
代码内容如下:
1 | # !/usr/bin/python3 |
运行结果如下图,由于角度、颜色也是随机生成的,所以每次运行结果是不一致的。
在网络上找到的示例,看起来更好看一些。
玫瑰花
玫瑰花比较有意思,会涉及到非规则图形,花瓣的形状怎么绘制、绿叶的形状怎么绘制等。
简单思路:
- 先绘制花瓣的边框,包括填充颜色
- 再绘制花瓣中的线条,凸显出花瓣的层次
- 绘制花枝主干
- 绘制两片绿叶,包括绿叶的枝条
代码如下:
1 | # 导入海龟绘图模块 |
这里面的重点就是 degree_curve (n, r, d=1)
方法,它是为了绘制不规则图形而定义的。此外用的次数比较多的就是海龟绘图内置的 circle
方法,用来绘制标准的圆弧。
运行结果如下图,包含花瓣、绿叶。
参考
Python
官方文档:Python3 文档说明