大数跨境
0
0

【小喵科技】在kittenblock中学Python3:画笔控制

【小喵科技】在kittenblock中学Python3:画笔控制 KittenBot小喵
2019-09-14
0
导读:小喵科技在造物节期间被浙江卫视采访,上电视啦,激动~

老带劲啦!

因为小喵在节假日招待游客很忙,所以素材有限,后面闲暇为大家带来更多有趣内容!



在造物节的12号下午,浙江卫视来采访我们啦~

https://newsapp.cztv.com/video/index.jsp?c=6037714&from=groupmessage&isappinstalled=0



开学季学习套件热卖中


点击欣赏精彩视频


 


点击图片查看详情


———————————————

通过前面两节的学习,大家可能会感觉到实际上的编程相当于我们手握一直笔,通过各种指令控制笔的路径。没错,我们平时写字或画画的各种操作都能够用代码实现。包括抬起笔或者落下笔,改变笔的颜色,改变笔的粗细等等。。


画笔控制


我们可以在画笔的扩展插件中看到两个笔控制的方块

其对应的python代码就是:

Beetle.penDown()Beetle.penUp()

通过这两个指令的组合我们可以画一条虚线:

Beetle.penDown()Beetle.move(10)Beetle.penUp()Beetle.move(10)Beetle.penDown()Beetle.move(10)Beetle.penUp()Beetle.move(10)Beetle.penDown()Beetle.move(10)Beetle.penUp()Beetle.move(10)Beetle.penDown()Beetle.move(10)Beetle.penUp()Beetle.move(10)

实际上我们可以看到当画笔抬起来后我们依然可以让我们的bug移动,只不过不留下路径了。

改变画笔的颜色

我们当然也可以改变我们的画笔颜色

大家可以点击颜色框打开颜色选择的框框,选择好自己喜欢的颜色再拖入python编辑器,

对应的代码如下:

Beetle.setColor("#5900ff")

其中setColor函数中的参数 **"#5900ff"**是颜色值的16进制表达,井号后面每两个字母分别对应红绿蓝三个颜色的值大小,从0到ff(0~255)。

我们改造一下上一节的Z字代码,让它画一个彩色的字母:

Beetle.gotoXY(0, 100)Beetle.direction(90)Beetle.clear()Beetle.setPenSize(3)Beetle.penDown()Beetle.setColor("#FF0000")Beetle.gotoXY(100, 100)Beetle.setColor("#00FF00")Beetle.gotoXY(0, 0)Beetle.setColor("#0000FF")Beetle.gotoXY(100, 0)

大家注意观察下setColor中FF的位置变化如何控制颜色的变化。

改变画笔的大小

在每一笔画完之后我们将笔的大小增加5个像素。

Beetle.gotoXY(0, 100)Beetle.direction(90)Beetle.clear()Beetle.setPenSize(3)Beetle.penDown()Beetle.setColor("#ff0000")Beetle.gotoXY(100, 100)Beetle.changePenSize(5)Beetle.setColor("#00FF00")Beetle.gotoXY(0, 0)Beetle.changePenSize(5)Beetle.setColor("#0000FF")Beetle.gotoXY(100, 0)
画一个圆

NEWS

我们先从数学上来思考一个圈的属性。我们都知道一个圆有360度,如果我们每前进一步转1度,最后不就是一个圆了吗?

我们先回到图形化模式快速验证下我们的想法。

点击绿旗帜看看最后的运行结果,注意这里我们使用了循环方块。

对应的python代码如下:

# -*- coding: utf-8 -*-import _env, time, randomfrom scratch3 import *Beetle = Sprite("Beetle")x = 0Beetle.gotoXY(0, 0)Beetle.direction(90)Beetle.clear()Beetle.setPenSize(3)Beetle.setColor("#ff0000")Beetle.penDown()for count in range(360):
Beetle.turnLeft(1)
Beetle.move(1)

但是我们平时我们做算术题的时候都是使用半径和原点来定义一个圆的,这种bug作图完全没办法控制呀~

我们知道圆的周长是2x3.14x半径,如果我们要画一个半径为100的圆,那么每一步就应该是(2x3.14x100/360)= 1.745

我们来验证一下我们的想法,将for循环中移动的代码改造一下

并让bug一开始就处在负Y轴的(0,-100)位置

Beetle.gotoXY(0, -100)Beetle.direction(90)Beetle.clear()Beetle.setPenSize(3)Beetle.setColor("#ff0000")Beetle.penDown()for count in range(360):
Beetle.turnLeft(1)
Beetle.move(2*3.14*100/360)

大家看看最终效果是不是一个圆心就在(0,0),半径为100的圆呢?

函数化

我们上面画了一个完美的圆圈,但是我想让我们的代码更加通用,可以在任意位置,任意半径画圈圈,最好还可以改变颜色。。

这时候就需要祭出python的函数功能了。

如果对python函数不熟悉的同学可以先用scratch3的自定义函数上手,我们点击自制积木->制作新的积木

之后定义一个具有四个输入参数的积木,分别对应圆的半径,原点x,原点y,颜色。

这里我们首先用图形化方块描述这个函数的功能,基本就是把我们前面画圆的代码重新使用输入参数抽象化:

之后转到python代码编辑器,注意点击**</>**按钮重新生成python代码:

# -*- coding: utf-8 -*-import _env, time, randomfrom scratch3 import *Beetle = Sprite("Beetle")x = 0def circle(R, x, y, color):
Beetle.gotoXY(x, -1 * R)
Beetle.setColor(color)
Beetle.penDown()
Beetle.direction(90)
for count in range(360):
Beetle.turnLeft(1)
Beetle.move((2 * (3.14 * R)) / 360)
Beetle.penUp()Beetle.setPenSize(3)Beetle.clear()circle(100, 0, 0, "#ff0000")

其中def circle(R, x, y, color):就是python下的函数定义了,其中def就是definition的缩写,表示后面是一个函数定义。紧接着是函数的名字,括号内对应的是函数的参数。图形化只是带领大家入门,关于python函数的花式玩法有很多,大家可以参考我们另外一篇micropython系列教程或者其他python教材都有详细的阐述。

注意函数或者其他带作用域的定义均需要以冒号结尾,并且在下一行需要使用空格或者tab缩进。同样作用域的代码需要具有同样的缩进,不然python解释器运行的时候会报错,更糟糕的情况是完全给出错误的执行结果。

最后我们在python代码中加入随意的几个circle函数调用,并看看效果。

circle(100, 0, 0, "#ff0000")circle(20, -20, 0, "#00ff00")circle(40, 30, 30, "#ff0000")circle(80, -20, 20, "#ff00ff")circle(60, 0, 0, "#00ffff")

本章完~


造物节期间淘宝直播好玩内容

手淘首页查看,确定不来吗?



1


喵仙人许愿机


心中默念愿望,让喵仙人告诉你答案吧!



2



竞技机器人十二合一


火爆校园的Microbit扩展板,简单上手的图形化编程搭配人工智能硬件,软硬兼施,锻炼你的逻辑思维力!

 🍊乐高的兼容性使得整体变得魔性多变,加上你喜欢的传感器,天黑障碍熟视无睹!🍉独家打造的乐高积木块,丝滑的手感和精密的细节 

🌰狂暴角龙/相扑选手/夺旗校尉风驰电掣/巨拳螳螂/雷暴犀牛 机灵捕手/战争炮台/智能纸巾机 疯狂掠夺者/路障克星/足球小将

应接不暇,想玩啥就玩啥!

 😃无论是手柄,APP,还是体感操作都轻松无压力,放下手机,和小伙伴来场联机游戏吧!



【造物节 Kittenbot小喵科技格斗小车十二合一microbit智能巡线避障】https://m.tb.cn/h.eljfnsu?sm=6af4e6 点击链接,再选择浏览器咑閞;或椱ァ製这段描述$O5TgYlvJnxm$后到◇綯℡寳


3


皮影戏


传统技艺与科技的碰撞,这必定是一场新奇的盛宴


4


垃圾分拣机


通过AI摄像头识别并进行自动分拣

你知道怎么分类吗?



5


么得感情的猜拳机器人


虽说是机器人,但是你可不一定能赢得了它

不信?那就来一决高下吧!!!

为啥么得感情?因为它有可能把你赢得怀疑人生

你却无可奈何


能量魔块(不带积木版)造物节特价!

立减百元!

进入首页查看详情


【造物节 Kittenbot小喵科技格斗小车十二合一microbit智能巡线避障】https://m.tb.cn/h.elYeo31?sm=4d4fbc 点击链接,再选择浏览器咑閞;或椱ァ製这段描述¢UeFqYlvstwt¢后到◇綯℡寳




总结

和小喵一起学习吧!

1.QQ群

 444193538

2.喵家论坛

https://bbs.kittenbot.cn/forum.php

3.我们的Kittenblock软件http://learn.kittenbot.cn/zh_CN/latest/kittenblock/index.html

4.小喵科技店铺

https://kittenbot.taobao.com/shop/view_shop.htm?tracelog=twddp&user_number_id=2830157417

5.哔哩哔哩课程系列

https://space.bilibili.com/25299911




精彩教程作品

人工智能教程系列

系列一:中小学人工智能应该怎么学习 

系列二:文字朗读

系列三:文字翻译

系列四:语言识别

系列五:超级翻译官

系列六:专家系统

系列七:视觉识别01初探

系列八:视觉识别02人脸追踪

系列九:视觉识别03人脸检测

系列十:视觉识别04特定人脸辨别

系列十一:视觉识别05识别车牌

系列十二:视觉识别06识别印刷文字


机器学习教程系列

系列一:Tensorflow简介

系列二:TensorFlow快速开始(程序包集合)

系列三:鸢尾花(Iris)分类

系列四:MNIST 手写数字识别

系列五六:MNIST模型保存加载和识别

系列七:MobileNet模型任意物体识别

系列八:MachineLearning5 简介


机器学习5(轻量TensorFlow)教程系列

系列一:MachineLearning5 简介

系列二:图像分类器---看图识物

系列三:图像分类器---识别给定的图片

系列四:图像分类器---识别摄像头窗口物体

系列五:特征提取器入门

系列六:特征提取器---剪刀石头布为例

系列七:特征提取器---识别不同颜色

系列八:涂鸦KNN应用

系列九:骨架追踪


物联网教程系列

系列一:什么是物联网?

系列二:kittenblock本地IOT服务器--快速上手

系列三:kittenblock本地IOT服务器--温度推送

系列四:喵家外网IOT服务器

系列五:让microbit加入IOT

系列六:让rosbot加入IOT

系列七:中国移动Onenet使用--能量魔块

系列八:Thingspeak中应用--Microbit

物联网系列暂时完结


kittenblock软件教程更新

系列一:kittenblock学习指南教程

系列二:下载与安装

系列三:工具栏详解

系列四:编程积木分栏

系列五:舞台展示区

系列六:书包功能

系列七:列表导入导出功能

系列八:护眼模式切换,在线和离线模式

系列九:连接引擎使用简介

系列十:Thing Speak使用介绍

系列十一:自动化插件生成系统

系列十二:软件中界面翻译和插件翻译

系列十三:和风天气插件开发指南

系列十四:Kittenblock插件开发指南 -- 01

系列十五:Kittenblock插件开发指南 -- 02


每周末开启限时抢购!记得来哦!





【声明】内容源于网络
0
0
KittenBot小喵
专注于从入门到精通的移动机器人开源学习平台
内容 560
粉丝 0
KittenBot小喵 专注于从入门到精通的移动机器人开源学习平台
总阅读199
粉丝0
内容560