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

猜猜我是谁

我相信,只要你参加了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年第二届国际青少年编程大赛,就一定 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化

    作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...

  9. python半圆代码_趣味项目:用Python代码做个月饼送给你!

    所用工具 1.Python中的turtle包 2.对Python似火的热情 先来介绍一番 Turtle作图又叫海龟作图,是Python中比较有趣的一个模块,功能强大,使用方便.简单来说,比如有一块空地 ...

最新文章

  1. 国内外有哪些不错的需求管理工具?如何选择?
  2. 腾讯云AMD服务器8元/月
  3. 目前的计算机还没有实现真正的智能
  4. 跳一跳python源码_使用Python实现跳一跳自动跳跃功能
  5. 编写你的第一个 Django 应用,第 6 部分
  6. 安徽大学计算机语言学考研真题,安徽大学外国语言学及应用语言学考研经验考研真题考研参考书复试分数线...
  7. php CURL 发送请求详解
  8. socket php验证客户端验证,用Socket发送电子邮件(利用需要验证的SMTP服务器)
  9. 程序员是制造 Bug 的“元凶”?
  10. html如何添加时钟效果,基于HTML5+CSS3实现简单的时钟效果
  11. Python基础语法-03-私有化
  12. wps 字体对系统无效_WPS for Linux提示“系统缺失字体symbol、wingdings、wingdings 2、wingdings 3、webding”的解决方法...
  13. Windows常用快捷键和Windows CMD命令大全
  14. LGTM,XGBOOST,LIGHTGBM
  15. 怎样建立个人邮箱账号?个人邮箱有什么功能?
  16. 大道至简:软件工程实践者的思想(读后感想)
  17. 理解vue ssr原理,自己搭建简单的ssr框架
  18. 大菠萝 Pinia 持久化方案 Pinia Persist Own
  19. word文档加密、只读
  20. java单例模式的应用场景_单例模式的常见应用场景

热门文章

  1. JAVA :RESTLET开发实例(一)基于JAX-RS的REST服务
  2. 投资理财web后端系统_如何挑选现金类理财产品?三大对比了解一下
  3. 15_python基础—文件操作
  4. python get请求 url传参_requests的get请求url参数、url重定向处理及cookies
  5. python实现神经网络_3. Python矢量化实现神经网络
  6. html动态图标代码,SVG动态图标是如何实现的
  7. java 绘制sin函数图像_MATLAB基础学习之三维曲线的绘制
  8. python主线程和子线程_python 在threading中如何处理主进程和子线程的关系
  9. java简述常见的布局极其特点_请简要说明 Android 中五种常见布局的特点。_学小易找答案...
  10. php mysql csv_php导入csv到mysql数据库