专栏首页Python中文社区骚操作:用Python来一场人工造雪

骚操作:用Python来一场人工造雪

写在前面

今天北方的气温突然降到零下,让自己不由得裹紧了小被子,同样今天下了这个冬天的初雪,朋友圈乱了都在晒各种各样的雪,那么我给大家科普一下雪花的基本知识吧,雪花分三种:一种麦香,一种纯生,一种勇闯天涯

,自己早就过了那个一下雪就兴奋的年纪,只想穿得厚一点度过这个寒冬。

裹紧小被子的我给大家介绍一波Python的骚操作,利用Python绘制雪花。

具体介绍

先给大家介绍科赫曲线,科赫曲线在众多经典数学曲线中非常著名,由瑞典数学家冯 科赫于1904年提出,由于其形态类似雪花,也被成为雪花曲线。 下面对科赫曲线基本概念和绘制方法做个简单的介绍:正整数n代表科赫曲线的阶数,表示生成科赫曲线过程的操作次数。科赫曲线初始化阶数为0,表示一个长度为L的直线。对于直线L将其等分为3段,中间一段用边长为L/3的等边三角形的两个边替代,得到1阶科赫曲线,它包含4条线段。进一步对每条线段重复同样的操作后得到的2阶科赫曲线。重复操作N次可以得到N阶科赫曲线。 当然如果要绘制科赫曲线还要使用Python提供的Turtle。

代码实现 1阶科赫曲线

 1import turtle
 2from turtle import *
 3def koch(size,n):
 4    if n == 0:
 5        turtle.fd(size)
 6    else:
 7        for angle in [0,60,-120,60]:
 8            turtle.left(angle)
 9            koch(size/3,n-1)
10def main():
11    turtle.setup(600,600)
12    turtle.penup()
13    turtle.goto(-200,100)
14    turtle.pendown()
15    turtle.pensize(2)
16    level = 1
17    koch(400,level)
18    turtle.hideturtle()
19    done()
20main()

5阶科赫曲线如下图,有一点雪花的感觉了,但是还不是完整的雪花。

那么该如何画出一个完整的雪花呢?科赫曲线是从一条直线绘制开始的,如果想画一个完整的雪花可以将初始图形调整成倒置的三角形。完整代码如下:

 1import turtle
 2from turtle import *
 3def koch(size, n):
 4    if n == 0:
 5        turtle.fd(size)
 6    else:
 7        for angle in [0, 60, -120, 60]:
 8            turtle.left(angle)
 9            koch(size / 3, n - 1)
10def main():
11    turtle.setup(600,600)
12    turtle.pen(speed = 0, pencolor = 'blue')
13    turtle.penup()
14    turtle.goto(-200,100)
15    turtle.pendown()
16    turtle.pensize(1)
17    level = 5
18    koch(400,level)
19    turtle.right(120)
20    koch(400, level)
21    turtle.right(120)
22    koch(400, level)
23    turtle.hideturtle()
24    done()
25main()

效果图:

如果想绘制其他有趣的图形,只需要调整初始图形就行。科赫曲线属于分形几何分支,它的绘制过程体现了递归思想。

本文分享自微信公众号 - Python中文社区(python-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python教你找到最心仪的对象

    專 欄 ❈ Toby,Python中文社区专栏作者,目前供职于国内最大的医药大数据平台,任数据分析组长。关注自然语言处理,英文密码学,医药统计学。 博客: h...

    Python中文社区
  • 基于docker+gunicorn部署sanic项目

    最近云服务提供商在打价格战,我在某云上花了很少的钱租了一个月的云服务器: 公网ip是: 116.85.42.182, 以下我以116.85.42.182这个ip...

    Python中文社区
  • Python运用蒙特卡洛算法模拟植物生长

    專 欄 ❈ Toby,微信号:drug666123,Python数据科学爱好者,擅长医药统计。国内最大药品数据中心任职,二十多个数据库负责人。 ❈ ? (细胞...

    Python中文社区
  • 用Python来一场人工造雪

    今天北方的气温突然降到零下,让自己不由得裹紧了小被子,同样今天下了这个冬天的初雪,朋友圈乱了都在晒各种各样的雪,那么我给大家科普一下雪花的基本知识吧,雪花分三种...

    PM小王
  • 7个Java问题在StackOverflow上的最佳答案

    对开发人员来说, StackOverflow就像一个金矿。对具体的问题,它能帮我们找到最有用的答案,并且我们也可以从上面学习新的知识。

    烂猪皮
  • salesforce 零基础学习(二十四)解析csv格式内容

    salesforce中支持对csv格式的内容批量导入,可以使用dataloader,然而有些情况下,当用户没有相关权限使用dataloader导入情况下,就的需...

    用户1169343
  • React源码解析之commitRoot整体流程概览

    在 React源码解析之renderRoot概览 中,renderRoot()的最后一段的switch...case即进入到了commit阶段:

    进击的小进进
  • python - 字典

    *********************字典******************

    py3study
  • cordova扫描二维码

    用户1437675
  • 了解SaaS阶段,实现更好的增长战略

    ? 来源/作者 :李宽wideplum ---- 今天编译一篇文章,通过了解 SaaS 的主要阶段,你可以在每个阶段创建和实现更好的增长战略。 ? 软件...

    腾讯SaaS加速器

扫码关注云+社区

领取腾讯云代金券