十分钟用Python画一片雪花

引言

在MOOC上看到一个好玩的实例——“用Python绘制科赫雪花小包裹”,挺有意思,也不难,尝试一下把它实现出来了,先上效果图(来源:中国大学慕课“Python语言程序设计”,主讲人:嵩天

效果图

在这里插入图片描述

十分钟用Python画一片雪花_第1张图片

思路

首先科普一下什么是科赫曲线,查阅百度百科解释如下:科赫曲线是一种像雪花的几何曲线,所以又称为雪花曲线,它是de Rham曲线的特例。科赫曲线是出现在海里格·冯·科赫的论文中,是分形曲线中的一种。科赫曲线是一种分形几何的图形,分形几何是一种迭代的几何图形,自然界中的花朵、植物叶片、雪花等都是这样的图形。我个人把分形几何简单地理解为:局部和整体结构一致的图形。以本文实现的科赫雪花为例,雪花的局部结构就和整体结构一致,如下图
十分钟用Python画一片雪花_第2张图片
n阶科赫曲线中,0阶是一条直线,一阶是把原直线分割为3段1/3长度,去掉中间一段直线,取之为一个凸起三角形的两边(边长也为原直线的1/3)得到的,二阶的话还是把一阶曲线的每段直线执行相同的操作,以此类推就得到n阶科赫曲线
十分钟用Python画一片雪花_第3张图片

那么如何用Python画出如此精美的图案呢?
首先,导入turtle库,用递归的方式绘制一条科赫曲线【补充递归的知识:1.定义:函数调用自身即为递归 2.实现方法:函数+分支结构(基例+链条)】
然后,将三条科赫曲线以等边三角形边的位置关系组合成科赫雪花。这样就搞定了

代码

#KochDrawV1.py
import turtle


def koch(size, n):                  # 绘制科赫曲线
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size/3, n-1)


def main(level):                    # 三条科赫曲线组合成科赫雪花
    turtle.setup(600, 600)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.hideturtle()


level = int(input("输入科赫雪花阶数:"))   # 输入阶数
main(level)

此外还可以用PyInstaller库(第三方库,要用pip命令安装)把Python源代码打包成后缀为.exe的可执行文件,这样就得到一个绘制雪花的软件,不依赖解释器环境就可以在Windows平台上运行。是不是很棒(๑•̀ㅂ•́)و✧
实现方法:先下载PyInstaller第三方库,之后在命令行中输入以下命令(Snowflake.ico是关联到软件的图标名,KochDrawV1.py是代码文件名称)

pyinstaller -i Snowflake.ico -F KochDrawV1.py

打包成软件
在这里插入图片描述
这里也提供了最终生成的可执行文件百度网盘链接
链接:https://pan.baidu.com/s/15lG-zIqoEFPyda0Jw2HQ-A
提取码:ai2p

你可能感兴趣的:(十分钟用Python画一片雪花)