【行空板 Python编程学习主控板评测四】Turtle海龟绘图
<div class='showpostmsg'><p><a name="_Hlk119705700"></a><b>【行空板 Python编程学习主控板评测四】Turtle海龟绘制奥运五环和桃花树</b></p><p align="left" > </p>
<p align="left" ><b>一、Turtle简介</b></p>
<p >Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。</p>
<p >行空板提供了多种编程方式,可以在Mind+环境下使用积木拖拽方式,也可以在Thonny环境下使用python语言方式编程。本文将简要介绍两种环境下如何使用Turtle绘制自己喜欢的图形。</p>
<p >Turtle是通过一系列的绘图命令实现相关功能。操纵海龟绘图有多种命令,这些命令可以分为3中,分别是:画笔运动命令、画笔控制命令和全局控制命令。</p>
<p ><b>1、画笔运动的命令</b></p>
<p >turtle.forward(a) 向当前画笔方向移动a像素长度</p>
<p >turtle.backward(a) 向当前画笔相反方向移动a像素长度</p>
<p >turtle.right(a) 顺时针移动</p>
<p >aturtle.left(a) 逆时针移动</p>
<p >aturtle.pendown() 移动时绘制图形</p>
<p >turtle.goto(x,y) 将画笔移动到坐标为x,y的位置</p>
<p >turtle.penup() 移动时不绘制图形,提起笔</p>
<p >turtle.speed(a) 画笔绘制的速度范围</p>
<p >turtle.circle() 画图,半径为正,表示圆心在画笔的左边画圈</p>
<p ><b>2、画笔控制命令</b></p>
<p >turtle.pensize(width) 绘制图形的宽度</p>
<p >turtle.pencolor() 画笔的颜色</p>
<p >turtle.fillcolor(a) 绘制图形的填充颜色</p>
<p >turtle.color(a1,a2) 同时设置pencolor=a1,fillcolor=a2</p>
<p >turtle.filling() 返回当前是否在填充状态</p>
<p >turtle.begin_fill() 准备开始填充图形</p>
<p >turtle.end_fill() 填充完成</p>
<p >turtle.hideturtle() 隐藏箭头显示</p>
<p >turtle.showturtle() 显示箭头</p>
<p ><b>3、全局控制命令</b></p>
<p >turtle.clear() 清空turtle窗口,但是turtle的位置和状态不会改变</p>
<p >turtle.reset() 清空窗口,重置turtle状态为起始状态</p>
<p >turtle.undo() 撤销上一个turtle动作</p>
<p >turtle.isvisible() 返回当前turtle是否可见</p>
<p >stamp() 复制当前图形</p>
<p ><b>4、turtle命令与mind+积木对应关系(部分)</b></p>
<table align="center">
<thead>
<tr>
<td >
<p align="center" ><b>命令</b></p>
</td>
<td >
<p align="center" ><b>Mind+</b><b>图形积木</b></p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td >
<p align="left" >turtle.pensize(width)</p>
</td>
<td >
<p > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.pencolor()</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.clear()</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.forward(distance)</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.left(degree)</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.goto(x,y)</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.penup()</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.speed(speed)</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
<tr>
<td >
<p >turtle.circle()</p>
</td>
<td >
<p align="left" > </p>
</td>
</tr>
</tbody>
</table>
<p align="left" ><b>二、Mind+环境绘制奥运五环</b></p>
<p align="left" >绘制奥运五环主要使用到画圆、抬笔、落笔、移动、设置笔的颜色等积木,具体使用方法不做详细介绍,上图。</p>
<p align="center" > </p>
<p align="center" > 视频</p>
<p align="center" > </p>
<p align="center" > </p>
<p align="left" ><b>三、Thonny环境编程</b></p>
<p align="left" >行空板在Turtle环境下编程使用方法见<a href="https://wiki.unihiker.com/thonny" style="color:blue; text-decoration:underline">行空板官方文档-Thonny使用教程 (unihiker.com)</a>,这里不做介绍,这里仅以画一幅樱花树为例给出行空板使用Turtle编程得到的效果。程序如下:</p>
<p align="left" >from turtle import *</p>
<p align="left" >from random import *</p>
<p align="left" >from math import *</p>
<p align="left" > </p>
<p align="left" >def tree(n, l):</p>
<p align="left" > pd() # 下笔</p>
<p align="left" > # 阴影效果</p>
<p align="left" > t = cos(radians(heading() + 45)) / 8 + 0.25</p>
<p align="left" > pencolor(t, t, t)</p>
<p align="left" > pensize(n/3)</p>
<p align="left" > forward(l) # 画树枝</p>
<p align="left" > if n > 0:</p>
<p align="left" > b = random() * 15 + 10 # 右分支偏转角度10</p>
<p align="left" > c = random() * 15 + 10 # 左分支偏转角度10</p>
<p align="left" > d = l * (random() * 0.25 + 0.7) # 下一个分支的长度0.7</p>
<p align="left" > # 右转一定角度,画右分支</p>
<p align="left" > right(b)</p>
<p align="left" > tree(n - 1, d)</p>
<p align="left" > # 左转一定角度,画左分支</p>
<p align="left" > left(b + c)</p>
<p align="left" > tree(n - 1, d)</p>
<p align="left" > </p>
<p align="left" > # 转回来</p>
<p align="left" > right(c)</p>
<p align="left" > else:</p>
<p align="left" > # 画叶子</p>
<p align="left" > right(60)</p>
<p align="left" > n = cos(radians(heading() - 45)) / 4 + 0.5</p>
<p align="left" > pencolor(n, n*0.8, n*0.8)</p>
<p align="left" > circle(3)</p>
<p align="left" > left(60)</p>
<p align="left" > if (random()>0.7):</p>
<p align="left" > pu()</p>
<p align="left" > # 飘落</p>
<p align="left" > t = heading()</p>
<p align="left" > an = -40 + random()*40</p>
<p align="left" > setheading(an)</p>
<p align="left" > dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2) #800,400,200</p>
<p align="left" > forward(dis)</p>
<p align="left" > setheading(t)</p>
<p align="left" > </p>
<p align="left" > # 画叶子</p>
<p align="left" > pd()</p>
<p align="left" > right(90)</p>
<p align="left" > n = cos(radians(heading() - 45)) / 4 + 0.5</p>
<p align="left" > pencolor(n*0.5+0.5, 0.4+n*0.4, 0.4+n*0.4)</p>
<p align="left" > circle(2)</p>
<p align="left" > left(90)</p>
<p align="left" > pu()</p>
<p align="left" > </p>
<p align="left" > #返回</p>
<p align="left" > t = heading()</p>
<p align="left" > setheading(an)</p>
<p align="left" > backward(dis)</p>
<p align="left" > setheading(t)</p>
<p align="left" > </p>
<p align="left" > pu()</p>
<p align="left" > backward(l)# 退回</p>
<p align="left" >bgcolor(0.5, 0.5, 0.5) # 背景色</p>
<p align="left" >ht() # 隐藏turtle</p>
<p align="left" >speed(0) # 速度,1-10渐进,0最快</p>
<p align="left" >tracer(0, 0)</p>
<p align="left" >pu() # 抬笔</p>
<p align="left" >backward(100)</p>
<p align="left" >left(90) # 左转90度</p>
<p align="left" >pu() # 抬笔</p>
<p align="left" >backward(200) # 后退200</p>
<p align="left" >tree(13, 80) # 递归7层</p>
<p align="left" >done()</p>
<p align="left" ></p>
<p align="left" >说明:程序中部分参数可以调整,显示效果会更好一些。 </p>
<p align="left" >通过<b>四、总结</b></p>
<p align="left" >通过在两种不同编程环境使用行空板,能够体验行空板可以适应不同环境的使用,既适合初学者,也可以让有一定python基础者发挥个人的想象力,创作更多有创意的作品。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>有点像分形</p>
我记得很久以前有个logo语言,跟这个有关系吗? 怎么感觉这个就是广告里说的儿童编程用的那套东西。
页:
[1]