今天带大家一起编写一个好玩的程序,你准备好了吗?

话不多说,让我们直接进去主题~

你知道下面这张图片中的角色是谁吗?猜猜我是谁

猜猜我是谁我相信,只要你参加了2020年第二届国际青少年编程大赛,就一定认识它!

没错,它就是比赛中的主角,人见人爱的超级机器人Dev!

这个造型讨喜的机器人陪伴我们度过了许许多多个欢乐的日子,它不仅带给我们知识,还带给了我们快乐。一定有很多选手对它优美的外形印象深刻,甚至还能将它画下来。

我的一位参赛学生也想将它画下来,但让他苦恼的是,他并不是那么擅长画画。作为他的编程老师,我也希望帮助到他。于是,我们不约而同地产生了一个念头:既然是编程大赛,为什么我们不用Python代码来绘制一个Dev呢?

经过不断的探索和实验,我们最终完成了下图中的作品。而这个作品,仅仅用到了椭圆、长方形和线段三种图形。很神奇吧?如果想知道这是如何完成的,就跟着我们的文章一步一步地探索吧!用Python代码绘制的Dev形象

准备工作

工欲善其事,必先利其器。在开始制作前,我们首先要准备好制作的工具。Python的开源库非常丰富,在图形方面有许多好用的资源,它们各有特色,许多库都可以实现类似的效果。作为一名编程教师,这个作品我门自然而然的选择了我们公司自研的Python图形库:pyleap。

借助pyleap库,我们可以绘制常见图形、图片以及文字,可以检测到鼠标和键盘的时间,还能够实现动画效果和碰撞的检测,很方便地就能完成一些具有交互功能的图形化作品。

在这个作品中,我们要用到的知识点非常少:椭圆的绘制,长方形的绘制,线段的绘制以及图形的旋转。pyleap中的图形对象

图形创作

选定了工具,就进入了创作阶段。在创作Dev时,最困难的地方就是它的身体,眼睛的反光以及身上的橙色装饰线。这些部分都是没有办法直接用简单的单个图形来绘制的。为了解决这些难点,我们探索出了3个秘籍:组合、遮盖和细分。组合

有些图形,很难直接用一个图形绘制出来,比如Dev的手:

Dev的手上有两种颜色,但一个图形只能有一种颜色。不过这难不倒我们,我们只需要用两个不同颜色的椭圆组合起来就行了。下图演示了这个过程:用两个椭圆组合成Dev的手

组合的方式在绘制过程中使用得非常多。例如,Dev头顶的绘制也使用了类似的方式:我来组成头部

还有哪些地方可以用到这种方式呢?请你也自己探索一下吧!遮盖

有些部分,不能用简单组合的方式来绘制,我们必须要善用遮盖关系来制作。例如,Dev的眼睛是由简单的椭圆形来组成的,但要做出立体的感觉,还必须得用到遮盖的技巧。

下图演示了如何制作出玻璃上不规则反光的效果:反光效果是实现玻璃突出效果的关键

还有一个不太明显的地方也用到了遮盖的办法:Dev的身体。在Dev身体的遮盖关系中,我们用了描边的方式来画椭圆,巧妙地绘制出了Dev身体的形状。用椭圆形的描边来进行遮盖

将已经制作好的Dev的头顶添加上去,就组成了Dev的主体。遮盖的位置非常考验技巧

只要用于遮盖的图形和背景颜色一致,就不会看到组合的痕迹。让多余的图形融入黑暗中细分

对于Dev身体上的曲线,我们可以用细分的方式来呈现,这和古代数学家刘徽求圆周率时使用的“割圆术”,就是将曲线化作直线来处理,这其中也蕴含了数学的微分思想。刘徽的割圆术

如图所示,只需要四条线段,就能组成Dev腰上的曲线:图中用不同颜色标出了不同的线段

同样的,Dev头顶的曲线也可以这样完成,这里就不再赘述了。

总之,掌握了这三种方法,加以灵活运用,就能够组成一个可爱的Dev形象了。

代码实现

我们已经确定了用简单图形绘制Dev的可能性,现在就要用代码来实现了。我们要使用的图形在pyleap中分别属于三个类:Ellipse(椭圆),Rectangle(长方形),Line(线段)。

在使用这些图形时,我们还需要对它们进行一些旋转,因此还会用到rotation属性。同时,我们还需要用set_anchor方法来设置一些特殊的旋转中心。

在绘制时,可以用draw方法来填充绘制,也可以用stroke方法绘制描边。

具体的代码知识就不在这里展开了。我会在文章最后列出完整的代码,如果你感兴趣,可以自己去研究pyleap库和我的代码,相信这会为你打开新的世界。

说在最后

最后,我想说一些自己的感想:

都说兴趣是最好的老师,看到我的学生在这次比赛中的表现,我觉得我们的学生缺少的不是好奇心和探究精神,而是优秀的教学内容和愿意和他一起成长的伙伴和老师。

很高兴能看到有这样免费的优秀资源,可以让所有学生都对编程知识感兴趣,让他们体验到编程的魅力。希望有更多的老师和学生加入到比赛中来,也希望有更多的优秀内容被分享给所有学生,少年强则中国强,这是我辈不可推卸的责任。

附:完整代码

在运行前,需要安装Python3和pyleap库。

Python3的安装方法百度即可;

Python3安装完成后,可以在命令行里使用pip install pyleap命令快速安装pyleap库。

from pyleap import *

window.set_size(400, 600)

bg = Rectangle(0, 0, 400, 600, "black")

e1 = Ellipse(200, 570, 112, 380, "#afc4f8")

e2 = Ellipse(200, 400, 100, 60, "#dce7f9")

e3 = Ellipse(200, 415, 90, 50, "#f8f8f9")

e4 = Ellipse(245, 320, 35, 45, "#f8f8f9")

e5 = Ellipse(250, 320, 28, 35, "#27e3fe")

e6 = Ellipse(247, 325, 25, 32, "#203be5")

e7 = Ellipse(244, 335, 12, 22, "#ecf1f9")

e8 = Ellipse(250, 322, 7, 20, "#203be5")

e9 = Ellipse(145, 285, 45, 55, "#f88033")

e10 = Ellipse(205, 590, 150, 410, "black")

e11 = Ellipse(125, 280, 25, 53, "#afc4f8")

e12 = Ellipse(120, 285, 22, 50, "#f8f8f9")

e13 = Ellipse(140, 284, 42, 55, "#f7ac49")

e16 = Ellipse(270, 295, 25, 53, "#dae6f9")

e17 = Ellipse(265, 291, 20, 75, "#afc4f8")

r1 = Rectangle(0, 400, 400, 200, "black")

n1 = Line(195, 270, 210, 265, 2, "#f88033")

n2 = Line(210, 265, 233, 264, 2, "#f88033")

n3 = Line(233, 264, 258, 273, 2, "#f88033")

n4 = Line(258, 273, 275, 290, 2, "#f88033")

n5 = Line(251, 362, 250, 385, 4, "#afc4f8")

n6 = Line(250, 385, 240, 410, 3, "#afc4f8")

n7 = Line(240, 410, 215, 436, 2, "#afc4f8")

n8 = Line(215, 436, 182, 453, 2, "#dce7f9")

n9 = Line(182, 453, 156, 456, 2, "#dce7f9")

e18 = Ellipse(166, 453, 20, 8, "#afc4f8")

n10 = Line(155, 455, 135, 480, 10, "#dce7f9")

c1 = Ellipse(126, 492, 18, 18, "#8c5179")

c2 = Ellipse(123, 495, 14, 14, "#a2617f")

c3 = Ellipse(118, 500, 5, 5, "#af9f7f")

e4.rotation = -20

e5.rotation = -20

e6.rotation = -30

e7.rotation = -50

e8.rotation = -55

e9.rotation = 50

e10.line_width = 35

e11.set_anchor(120, 320)

e12.set_anchor(120, 320)

e11.rotation = -10

e12.rotation = -10

e13.rotation = 50

e16.set_anchor(255, 325)

e17.set_anchor(255, 320)

e16.rotation = 15

e17.rotation = -20

e18.rotation = 10

def draw(dt):

window.clear()

bg.draw()

e1.draw()

r1.draw()

e2.draw()

e3.draw()

e9.draw()

e13.draw()

e10.stroke()

n5.draw()

n6.draw()

n7.draw()

n8.draw()

n9.draw()

e16.draw()

e17.draw()

e4.draw()

e5.draw()

e6.draw()

e7.draw()

e8.draw()

e11.draw()

e12.draw()

n1.draw()

n2.draw()

n3.draw()

n4.draw()

n10.draw()

e18.draw()

c1.draw()

c2.draw()

c3.draw()

repeat(draw)

run()

继续探索:让Dev动起来

添加一些简单的代码,就可以让代码绘制的Dev动起来,大家好好研究一下!

把你的答案写在留言区,跟大家一起来讨论吧~

用python画机器人_手残党福音:用Python画出机器人Dev~相关推荐

  1. python画椭圆形_手残党福音:用Python画出机器人Dev

    你知道下面这张图片中的角色是谁吗? 猜猜我是谁 我相信,只要你参加了2020年第二届国际青少年编程大赛,就一定认识它! 没错,它就是比赛中的主角,人见人爱的超级机器人Dev! 这个造型讨喜的机器人陪伴 ...

  2. android ios 画图 app,手残党也能自画“小怪兽”?这些画图app你必须知道!

    原标题:手残党也能自画"小怪兽"?这些画图app你必须知道! 如今,手机在手,所有事情都变得越来越简单,画画也是. 年轻人的流行主题总是来得又快,走得也急.这个现象在大家的朋友圈中 ...

  3. 惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开

    2020年,可以说是英特尔最难受的一年,多年来的挤牙膏大法也不灵了,面对AMD更先进的7mm制程以及更多的线程数,加上本身更合理的售价,说实话就连一向占据处理器半壁江山的英特尔也感受到了很高的威胁.A ...

  4. 用python创建微信机器人_手把手教你用Python创建微信机器人

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一个微信聊天机器人. 因为是微信机器人系列的第一篇文章,所以笔者会特别详 ...

  5. python canvas画弧度_只要十分钟,python绘图神器turtle了解一下?

    python的强大在于它有许多的强大的库,turtle就是其中之一. 利用turtle,你可以进行交互式的绘画,作为一个艺术白痴,想要画一幅画可能很困难,但是利用python的turtle库,只需要几 ...

  6. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

  7. “扔瓶子”有套路?日本高中生开发机器人,手残党们有救了

    作者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 没想到始于 2016 年的一款扔瓶子游戏,竟到如今还流行在(视频中的)街头巷尾,得到不少年轻人的追捧. 如果你还没尝试过这项活动的 ...

  8. python turtle绘图如何一次性画完_只要十分钟,python绘图神器turtle了解一下?

    python的强大在于它有许多的强大的库,turtle就是其中之一. 利用turtle,你可以进行交互式的绘画,作为一个艺术白痴,想要画一幅画可能很困难,但是利用python的turtle库,只需要几 ...

  9. python画熊猫头_超简单的熊猫头简笔画原创教程步骤

    导读:小编根据大家的需要整理了一份关于<超简单的熊猫头简笔画原创教程步骤>的内容,具体内容: 熊猫生活在海拔2600-3500米的茂密竹林里,那里常年空气稀薄,云雾缭绕,气温低于20℃.那 ...

最新文章

  1. 有兴趣的执行一下这段代码
  2. python反转链表和成对反转
  3. linux让数值依次递增的快捷键,如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?...
  4. 交易平台为什么而存在?
  5. mysql教程清华课后答案_mysql学习之路_sql
  6. 《Python数据分析常用手册》NumPy和Pandas
  7. MDK5中代码补全功能
  8. spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)
  9. 成年人的世界里,赚钱是保护自己和身边人最高效的手段
  10. 从事测试的第6年 , 开工第二天五千字总结..我不平凡的2021
  11. 运营商大数据有哪些好处
  12. 日报系统、周报系统推荐
  13. IDEA远程调试代码
  14. 日记侠:如何提高朋友圈活跃度,给你5种实用方法
  15. 29 使用内核里的W25Q32设备驱动
  16. 关于win7阉割版pycharm pyttsx3库无法使用解决方法
  17. coursera 吴恩达 -- 第一课 神经网络和深度学习 :第三周课后习题 Key concepts on Deep Neural Networks Quiz, 10 questions
  18. list_del()
  19. 【蓝桥杯每日一练】—字符逆序
  20. python5 5的 阵列_Biopython表型微阵列

热门文章

  1. 若依 分离版 组件 图片上传 预览
  2. 计算机毕业设计 SSM在线教学视频点播系统(源码+论文)
  3. 多人上传文件公共网盘_百度网盘带来文件收集功能 可设置后最多向500人收集文件并转存...
  4. Node.js 上传文件(multiparty包) (基于express)
  5. tp5 (图片)多图上传并生成可访问的链接
  6. Gitlab安装汉化
  7. IOS耗电量测试(一)耗电量数据获取
  8. 百无聊赖之JavaEE从入门到放弃(六)包机制 静态导入
  9. python内置函数lambda函数常见用法
  10. 如何下载带有超链接的图片