【编程 | scratch】[02] 巧用scratch画正多边形
看了上次的scratch入门文章后,是不是感觉跃跃欲试了,上次我们体验了scratch的画笔功能,那我们今天就尝试下用画笔来画几何图形吧。
上次用了画笔工具后,编者兴致盎然,一直想着用画笔工具画点什么?
本来想画个三角形或正方形之类的,没想到一发不可收拾,画了很多很多正多边形出来了,大家来欣赏下吧。
为了追求视觉上的统一,看起来没那么杂乱,干脆在同一个圆内画了这么多正多边形。不过虽然看着很简单,可是对小学生来说,实现起来可能还有点难度,因为这里面用到了若干三角函数的基础知识。
我们先不管上面的视频,我们先想想,如果要画个正方形,我们要怎么做呢?
画正方形如果只画个小正方形的话,可能很简单。
画之前特意问了我家的小朋友,小朋友只是说正方形方方正正的,四条边一样长。
方方正正是个什么意思呢?用稍微书面点的文字来描述,正方形主要有两点性质:
-
正方形有四条等长的边
-
正方形的每个角是直角
当我们用scratch画正方形的时候,就会牵涉到下面两个问题:
-
连续画4条线段
-
连续的2条线段是互相垂直的(直角)
♪
“落笔”开始画
回忆下上节课的内容,我们用画笔工具画线段的时候,是不是先要拿起画笔往“舞台区”上“落笔”呢?
如果我们不能确定“落笔”是什么意思,可以右击“落笔”按钮,然后再点击旁边所弹出的“帮助”按钮,会看到“脚本区”上面会打开一个页面,弹出如下提示和示例:
没错吧,“落笔”后再移动100步,小虫子后面就会画出一条线段。
♪
画线段
依样画葫芦,我们也这样搞,看看能不能画出一条线段呢?
看到没有,当我们点击“旗帜”运行的时候,左边“舞台区”就画上了一条蓝色的线段。画完以后我们“抬笔”,画笔抬起来了,表示画完了。
最后的“移到x:0 y:0”表示画笔放回中心点,方便下次用。当然,还可以防止画笔跑出了“舞台区”。
♪
画直角
我们按照上面的方法,连续画2条线段,2条线段之间形成一个夹角,怎么确保夹角是90度呢?
这里牵涉到角度的问题,小学低年级的小朋友可能还不知道转一圈是360度,360度四等分成4个直角,每个直角就是90度。
我们知道了直角是90度后,用“运动模块”里的右转/左转工具转个90度再画第2条线段,那这连续的2条线段形成的夹角就是直角。
我们调整下脚本。
哈哈,直角搞定了。
♪
重复右转4次搞定正方形
那我们再继续转几次正方形不就搞定了?
♪
利用循环控制来简化脚本
这样虽然搞定了,但脚本看起来有点重复,脚本里的移动100步都用了4次,还记得“控制”模块里的“重复执行”功能吗?我们用它来精简下。
看起来是不是精简些了呢?
画个三角形?正方形搞定了,我们尝试来画个正三角形吧?!
和前面的区别,主要就是转向的角度不一样了吧,正方形是转90度,三角形应该转多少度呢?
♪
三角形的性质
正三角形有哪些特性呢:
-
三条边相等
-
三角形内角和是180度,正三角形每个角是60度
那我们连续画线段的时候,是不是每次转个60度,回到起点后,就把一个正三角形画好了呢?
oh,my god!说好的三角形呢,怎么变成连续的几条线段呢?不过线段看起来很有规律的,我们再多重复画几条试试吧。
♪
失败的三角形=六边形
明明我们想画个正三角形,可是画出来的偏偏是个正六边形?
想想,哪里搞错了呢?原来呀,是我们的角度转得不对。
真是无心插柳柳成荫啊,我们明明想画个正三角形,因为方向转错了,竟然画出个正六边形出来了。
其实啊,如果左转120度(和右转60度等价),画出来的就是正三角形了吧。
♪
正十二边形
塞翁失马,焉知祸福?我们本来想画3条边的正三角形,却画出了6条边的正六边形。如果我们把左转的度数缩小一半到30度,把重复执行的次数增加一倍到12次,看看能画出个什么来呢?
当然了,画过一次后,我们发现舞台区不大,得把移动的步伐缩小点,不然又画出去了。
♪
正二十四边形
哈哈,继续,正二十四边形都出来了,有没有发现什么规律了吗?
♪
圆
明明是想画正48边形的,为什么看起来这么像圆?其实小朋友不知道的是,我们古时候的祖冲之呀,计算圆周率的时候,就是用这样的割圆术去逼近圆的。当正多边形的边数越来越大的时候,画出来的图形,越来越接近于圆。
♪
找规律
小朋友学数学,要善于找规律。
我们画了正六边形、正12边形、正24边形、正48边形,结合每次转的角度,有没有发现什么规律呢?
细心的小朋友可能还真发现了?我们把角度乘以边的个数,怎么乘积都是360度呢?
如果是正三角形,那3条边,左转的角度应该是360/3=120度吧。
♪
正三角形
还真是这样,原来画三角形的时候得左转120度呢。
综合上面所画的正多边形,其实我们发现了一个定理:
多边形外角和等于360度
♪
正N边形
依赖于这个性质,我们就可以根据上面的脚本画出任意正多边形,譬如画个正n边形,那我们只要左转360/n度就可以。
当然了,要控制下步数,免得画到“舞台区”外面去了。
组合成动画?知道了制作各类多边形后,那我怎么依次把这些正多边形画个遍呢?
当然了,从上节内容来看,多边形边数变大了,无非就是越来越像圆了,边数大了后,凭我们的眼睛又看不出差别,所以啊,我们画前面10多个正多边形就好了。
那我们得想想,每次循环画正多边形的时候,多边形的边数是不是不断变化的呢?这个要怎么实现?
♪
变量
循环的时候不断变化的值,我们可以存在变量里。
譬如,我们定义一个变量num,专门来存放正多边形的边数。
♪
双层循环控制
我们每次画一个正多边形num的时候,需要循环num次才能把该多边形画好,前面提到过,num变化的时候,我们也需要用一层循环来控制,那这样就需要两层循环来控制。
♪
完整脚本
全部脚本如下所示:
♪
动画效果图
为了看起来不至于太单调,每画一边的时候随机设置了画笔的颜色。
另外一种形式的动画?
不知道大家有没有发现,前面这个五彩缤纷的动画,有一个一直不变的东西,那就是正多边形的边长,我们每次循环画边的时候,移动的步数都是30步吧。
那我们现在换一种方式,我们绘制所有的正多边形,外接圆都重合的话要怎么画呢?
什么叫外接圆重合呢,每个正多边形的顶点共圆,我们要让所有多边形的顶点都在同一个外接圆上。
那这些正多边形之间有哪些共同的特性呢?
♪
不变的常量——外接圆半径
所有正多边形中,从圆心到任意一个多边形的端点,也就是圆的半径,一直是不变的。
还记得前面做的那个动图,不变的是什么吗?不变的是边长。
为了方便在脚本里编写调试,我们将这个不变的半径设置成一个常量R。当然,在scratch里其实都是变量。
我们将边数也设置成一个变量Num。
♪
固定出发点,调整好绘制方向
为了方便绘制,我们计划所有的正多边形统一从坐标系中的某个点出发,譬如坐标系中的点E{x=0,y=R}。
在scratch中,我们每次绘制一个正多边形的时候,都要将位置移动到{0,R}这个点,然后面朝某个方向开始绘制。
而对于正Num边形来说,这里我们取Num=6,也就是我们以正六边形为例。当我们把位置移动到{0,R}的时候,第一条线绘制的方向是不是线段DE的方向呢?
最初我们从圆心O{0,0}往上移动到E{0,R}的时候,是朝正北的,到了E点后,要转向到ED的方向,如下图所示:
通过上个动画的制作,我们知道所有正多边形的外角和是360度,所以每个正多边形的内角是180-360/Num,所以从OE转向DE,线段要面向的方向是180-(180-360/Num)/2=90+180/Num。对于正六边形来说,就是要面向120度的方向。
♪
边长
在六边形中,我们确定好起点E和方向后,我们还有确定好线段ED的长度。
其实,我们很容易知道角HOE为360/Num/2=180/Num。
根据正弦定理,易知线段EH=R*sin(180/Num),所以线段DE的长度就是线段EH的两倍,也就是2R*sin(180/Num)。
♪
右转方向
线段ED绘制好了以后,我们从线段ED转向线段DC,右转的度数是不是一个外角那么大呢?外角和是360度,那这个外角就是360/Num。
那这样循环Num次,正Num边形是不是画好了呢?
♪
完整脚本
完整脚本如下所示:
完整效果图如下,和前面的视频相比,只是增加了随机色而已。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com