今天用50行Python代码绘制了星空满天的动图。解释下为什么要做这样一件事,因为今天是空军成立72周年纪念日,希望通过这样的方式去表达出每个年轻人都向往像星空中的一颗星星,散发着自己的光芒照亮整个夜空的愿望。效果如下:

我是用 turtle 工具来绘制的,它是 Python 的标准库,可以描绘绘图轨迹,操作简单、快捷,api通俗易懂。

下面来看下具体代码,首先做一些全局的设置

import turtle
import random
import time# 设置画笔大小,数值越小画出的线条越细
turtle.pensize(1)
# 绘画延迟,单位:毫秒,数值越小绘画速度越快
turtle.delay(1)
# 隐藏画笔
turtle.hideturtle()
# 设置画布大小
turtle.setup(800, 800)

这里主要设置 turtle 的画笔大小、绘图延迟和画布大小。

绘制星空最关键的就是五角星,下面就来创建一个绘制五角星的函数

def star(x, y, left_angle, edge_len, color='yellow'):"""画一个五角星:param x: 起始x坐标:param y: 起始y坐标:param left_angle: 画笔方向逆时针转动度数:param edge_len: 五角星边的长度:param color: 五角星颜色:return:"""# 五角星边的颜色turtle.pencolor(color)# 五角星内部填充色turtle.fillcolor(color)# 绘制速度,0代表最快,1-10:数字越大越快turtle.speed(0)turtle.pu()  # 抬起画笔turtle.goto(x, y)  # 移动到初始位置turtle.pd()  # 放下画笔turtle.begin_fill()  # 开始填充图形# 画笔方向以水平方向为基准# 逆时针转动 left_angle 度turtle.left(left_angle)# 循环绘制五角星的 5 条边for _ in range(5):  # 向画笔方向移动edge_len像素长度# 即:绘制五角星的一条边turtle.forward(edge_len)# 画笔方向顺时针旋转144度# 由于五角星内角是36度,因此旋转180-36=144度turtle.right(144) turtle.end_fill()  # 填充完成# 将画笔方向恢复为水平方向,以免影响后续画图turtle.left(-left_angle)

上述代码主要涉及 tutle api 的使用,代码注释已有说明,这里就不再赘述了。

解释下为什么调用turtle.left(left_angle)函数来旋转画笔的方向。默认画笔的方向是水平的,如果不旋转,那么画出来的五角星都是同一个方向的,整个画面看起来没有层次感。下图是这两种效果的对比

另外,调用turtle.speed(1)可以看到慢速的绘图过程。

有了五角星之后,我们就可以不断调用star()函数实现漫天星空的效果了,代码如下

# 绘制满天星
# 添加背景图,需要是gif格式
turtle.bgpic('./bg.gif')
# 绘制 200 颗星星
for _ in range(200):  # 随机生成起始坐标、画笔方向和五角星边长rand_x = random.randint(-400, 400)rand_y = random.randint(0, 400)edge_len = random.randint(3, 8)left_angle = random.randint(0, 180)star(rand_x, rand_y, left_angle, edge_len, '#B7C5D2')

继续调用 star 函数绘制五星红旗

# 绘制五星红旗
# 清空之前图形
turtle.clear()
# 重新设置背景图
turtle.bgpic('./red_bg.gif')# 一次绘制国旗上的五颗星
star(-360, 320, 0, 80)
star(-260, 350, 40, 18)
star(-235, 330, 20, 18)
star(-235, 295, 0, 18)
star(-260, 270, -10, 18)# 让画布停留
turtle.done()

至此,整个代码就介绍完了,代码量不大且比较容易理解。

愿你是那天上星,永远闪耀照亮夜空——50行Python代码绘制满天星相关推荐

  1. 今天是七夕节、用100行CSS代码下一场流星雨、许一个愿、来一场美丽的邂逅

    今天是七夕节.用100行代码下一场流星雨.许一个愿.来一场美丽的邂逅 这个程序的核心使用CSS实现,基本原理就是利用CSS控制若干个div,本例是50个,当然,你可以弄更多的div,不过适当的流星是浪 ...

  2. 乌克兰基辅一世遗修道院起火 现场火光照亮夜空

    当地时间1月14日,乌克兰基辅佩切尔斯克修道院一座单独的建筑发生火灾,过火面积达到200平方米,一层和二层之间的楼板部分坍塌. 基辅佩切尔斯克修道院是基辅罗斯最早的修道院之一.1990年,修道院被列入 ...

  3. LLVM 之父 Chris Lattner:模块化设计决定 AI 前途,不服来辩

    作者 | OneFlow社区 来源 | OneFlow 缺乏模块化的单体系统就像浑然一体的金字塔,失去了演化空间,抑制了创新速度.当前,AI领域正面临系统和工具链的互不兼容和碎片化,对这种混杂局面,编 ...

  4. python满天星效果图_50行Python代码绘制满天星

    今天用50行Python代码绘制了星空满天的动图.解释下为什么要做这样一件事,因为昨天是青年节,希望通过这样的方式去表达出每个年轻人都像是星空中的一颗星星,散发这自己的光芒照亮整个夜空.效果如下: u ...

  5. 拒绝经验过剩,“程序员的工作只能是代码”?

    似乎软件工程师都有一个自然而然的成长过程:从缺乏经验的新手,发展到中级工程师,进而成为经验过剩的工程师.一旦软件工程师进入经验过剩阶段,他们对代码的兴趣就会降低!那么哪些迹象表明你已经经验过剩了呢? ...

  6. 全部文章分类与整理(找工作+面试+资源分享),持续更新

    阅读本文大概需要 6 分钟 由于本公众号发表的文章有点多,并且发的文章也不是一个专题一个专题这样发的,所以难免有读者过来找我吐槽说,想搜索历史的文章,不太方便. 鉴于此,为了大家阅读文章方便,我整理了 ...

  7. ​谷歌大神 Jeff Dean 领衔,万字展望5大 AI 趋势

    ‍‍ 作者 | 学术头条 来源 | 学术头条 对于关心人工智能技术进展的读者来说,每年年底来自整个谷歌 research 团队撰写的年终总结,可谓是必读读物. 今天,由谷歌大神 Jeff Dean 领 ...

  8. 50行代码教AI实现动作平衡 | 附完整代码

    作者 | Mike Shi 译者 | linstancy 责编 | Jane 出品 | AI科技大本营(id:rgznai100) [导读]本文将为大家展示如何通过 Numpy 库和 50行 Pyth ...

  9. python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏

    集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...

最新文章

  1. Appium_swipe模拟上下左右滑动操作
  2. 李德毅院士:新一代人工智能十问
  3. 如何在ImageView中缩放图像以保持纵横比
  4. opensuse 42.2 mysql_【Linux】Grub模式硬盘安装openSUSE 42.2
  5. 获取list泛型_泛型
  6. httpf发送 json_Java发送http请求发送json对象
  7. tps+qps+mysql_实时获取MySQL的TPS、QPS(输出到屏幕)
  8. cocos2d(CCSprite 用贝塞尔做抛物线,足球精灵并且同时做旋转放大效果)
  9. js 中的 number 为何很怪异 1
  10. 四大网络抓包神器,总有一款适合你~
  11. 如何在cad中模块计算机,cad中家具模板哪里找(怎么在CAD图纸里面加入家具)
  12. MATLAB中fspecial函数的用法
  13. axios跨域访问报错500
  14. C语言(素数)[解法]:编写prime(m)判断m是否为素数,当m为素数返回1,否则返回0;
  15. 2021开年巨作!JDBC连接数据库工具类!
  16. 全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了
  17. 《操作系统》工作集详解
  18. CityMaker学习教程08 一个示例,创建漫游路径
  19. 2021及历届国科大高级OS思考题汇总
  20. VLfeat学习(1)——Covariant feature detectors(协变特征检测器)

热门文章

  1. 有CISAW证书能拿到多少工资?
  2. IAT:实时完成暗光增强, 曝光矫正的超轻量级Transformer网络
  3. 清华大学知识工程实验室招聘前端工程师
  4. 你怎能证明圣经上的话语是上帝的话语呢?
  5. 【web3j】java调用链上合约里的方法
  6. Vue-CLI 4.0配置CDN的方法
  7. ABP VNext系列(一)-第一个ABP VNext
  8. 基于PHP+小程序(MINA框架)+Mysql数据库的跳蚤市场二手交易小程序系统设计与实现
  9. 希尔贝壳荣获 “悟道之巅——AI创新应用大赛”主赛道优胜奖
  10. ChemDraw绘制苯甲酸钠的生成反应式的方法