【编程 | scratch】[02] 巧用scratch画正多边形

网友投稿 2018-09-20 12:34

看了上次的scratch入门文章后,是不是感觉跃跃欲试了,上次我们体验了scratch的画笔功能,那我们今天就尝试下用画笔来画几何图形吧。

上次用了画笔工具后,编者兴致盎然,一直想着用画笔工具画点什么?

本来想画个三角形或正方形之类的,没想到一发不可收拾,画了很多很多正多边形出来了,大家来欣赏下吧。

为了追求视觉上的统一,看起来没那么杂乱,干脆在同一个圆内画了这么多正多边形。不过虽然看着很简单,可是对小学生来说,实现起来可能还有点难度,因为这里面用到了若干三角函数的基础知识。

我们先不管上面的视频,我们先想想,如果要画个正方形,我们要怎么做呢?

画正方形

如果只画个小正方形的话,可能很简单。

画之前特意问了我家的小朋友,小朋友只是说正方形方方正正的,四条边一样长。

方方正正是个什么意思呢?用稍微书面点的文字来描述,正方形主要有两点性质:

  • 正方形有四条等长的边

  • 正方形的每个角是直角

当我们用scratch画正方形的时候,就会牵涉到下面两个问题:

  • 连续画4条线段

  • 连续的2条线段是互相垂直的(直角)

“落笔”开始画

回忆下上节课的内容,我们用画笔工具画线段的时候,是不是先要拿起画笔往“舞台区”上“落笔”呢?

如果我们不能确定“落笔”是什么意思,可以右击“落笔”按钮,然后再点击旁边所弹出的“帮助”按钮,会看到“脚本区”上面会打开一个页面,弹出如下提示和示例:

https://cdn.china-scratch.com/timg/180922/1234323350-0.jpg

没错吧,“落笔”后再移动100步,小虫子后面就会画出一条线段。

画线段

依样画葫芦,我们也这样搞,看看能不能画出一条线段呢?

https://cdn.china-scratch.com/timg/180922/12343222a-1.jpg

看到没有,当我们点击“旗帜”运行的时候,左边“舞台区”就画上了一条蓝色的线段。画完以后我们“抬笔”,画笔抬起来了,表示画完了。

最后的“移到x:0 y:0”表示画笔放回中心点,方便下次用。当然,还可以防止画笔跑出了“舞台区”。

画直角

我们按照上面的方法,连续画2条线段,2条线段之间形成一个夹角,怎么确保夹角是90度呢?

这里牵涉到角度的问题,小学低年级的小朋友可能还不知道转一圈是360度,360度四等分成4个直角,每个直角就是90度。

我们知道了直角是90度后,用“运动模块”里的右转/左转工具转个90度再画第2条线段,那这连续的2条线段形成的夹角就是直角。

我们调整下脚本。

https://cdn.china-scratch.com/timg/180922/1234323164-2.jpg

哈哈,直角搞定了。

重复右转4次搞定正方形

那我们再继续转几次正方形不就搞定了?

https://cdn.china-scratch.com/timg/180922/123432HC-3.jpg

利用循环控制来简化脚本

这样虽然搞定了,但脚本看起来有点重复,脚本里的移动100步都用了4次,还记得“控制”模块里的“重复执行”功能吗?我们用它来精简下。

https://cdn.china-scratch.com/timg/180922/123433I17-4.jpg

看起来是不是精简些了呢?

画个三角形?

正方形搞定了,我们尝试来画个正三角形吧?!

和前面的区别,主要就是转向的角度不一样了吧,正方形是转90度,三角形应该转多少度呢?

三角形的性质

正三角形有哪些特性呢:

  • 三条边相等

  • 三角形内角和是180度,正三角形每个角是60度

那我们连续画线段的时候,是不是每次转个60度,回到起点后,就把一个正三角形画好了呢?

https://cdn.china-scratch.com/timg/180922/1234334329-5.jpg

oh,my god!说好的三角形呢,怎么变成连续的几条线段呢?不过线段看起来很有规律的,我们再多重复画几条试试吧。

失败的三角形=六边形

明明我们想画个正三角形,可是画出来的偏偏是个正六边形?

想想,哪里搞错了呢?原来呀,是我们的角度转得不对。

https://cdn.china-scratch.com/timg/180922/1234334592-6.jpg

真是无心插柳柳成荫啊,我们明明想画个正三角形,因为方向转错了,竟然画出个正六边形出来了。

其实啊,如果左转120度(和右转60度等价),画出来的就是正三角形了吧。

正十二边形

塞翁失马,焉知祸福?我们本来想画3条边的正三角形,却画出了6条边的正六边形。如果我们把左转的度数缩小一半到30度,把重复执行的次数增加一倍到12次,看看能画出个什么来呢?

当然了,画过一次后,我们发现舞台区不大,得把移动的步伐缩小点,不然又画出去了。

https://cdn.china-scratch.com/timg/180922/123434I11-7.jpg

正二十四边形

哈哈,继续,正二十四边形都出来了,有没有发现什么规律了吗?

https://cdn.china-scratch.com/timg/180922/1234342116-8.jpg

明明是想画正48边形的,为什么看起来这么像圆?其实小朋友不知道的是,我们古时候的祖冲之呀,计算圆周率的时候,就是用这样的割圆术去逼近圆的。当正多边形的边数越来越大的时候,画出来的图形,越来越接近于圆。

https://cdn.china-scratch.com/timg/180922/1234343201-9.jpg

找规律

小朋友学数学,要善于找规律。

我们画了正六边形、正12边形、正24边形、正48边形,结合每次转的角度,有没有发现什么规律呢?

https://cdn.china-scratch.com/timg/180922/1234345630-10.jpg

细心的小朋友可能还真发现了?我们把角度乘以边的个数,怎么乘积都是360度呢?

如果是正三角形,那3条边,左转的角度应该是360/3=120度吧。

正三角形

还真是这样,原来画三角形的时候得左转120度呢。

https://cdn.china-scratch.com/timg/180922/1234354B6-11.jpg

https://cdn.china-scratch.com/timg/180922/1234355454-12.jpg

综合上面所画的正多边形,其实我们发现了一个定理:

多边形外角和等于360度

正N边形

依赖于这个性质,我们就可以根据上面的脚本画出任意正多边形,譬如画个正n边形,那我们只要左转360/n度就可以。

当然了,要控制下步数,免得画到“舞台区”外面去了。

组合成动画?

知道了制作各类多边形后,那我怎么依次把这些正多边形画个遍呢?

当然了,从上节内容来看,多边形边数变大了,无非就是越来越像圆了,边数大了后,凭我们的眼睛又看不出差别,所以啊,我们画前面10多个正多边形就好了。

那我们得想想,每次循环画正多边形的时候,多边形的边数是不是不断变化的呢?这个要怎么实现?

变量

循环的时候不断变化的值,我们可以存在变量里。

譬如,我们定义一个变量num,专门来存放正多边形的边数。

https://cdn.china-scratch.com/timg/180922/1234354S5-13.jpg

双层循环控制

我们每次画一个正多边形num的时候,需要循环num次才能把该多边形画好,前面提到过,num变化的时候,我们也需要用一层循环来控制,那这样就需要两层循环来控制。

完整脚本

全部脚本如下所示:

https://cdn.china-scratch.com/timg/180922/1234354114-14.jpg

动画效果图

为了看起来不至于太单调,每画一边的时候随机设置了画笔的颜色。

https://cdn.china-scratch.com/timg/180922/12343523H-15.jpg

另外一种形式的动画?

不知道大家有没有发现,前面这个五彩缤纷的动画,有一个一直不变的东西,那就是正多边形的边长,我们每次循环画边的时候,移动的步数都是30步吧。

那我们现在换一种方式,我们绘制所有的正多边形,外接圆都重合的话要怎么画呢?

什么叫外接圆重合呢,每个正多边形的顶点共圆,我们要让所有多边形的顶点都在同一个外接圆上。

那这些正多边形之间有哪些共同的特性呢?

不变的常量——外接圆半径

所有正多边形中,从圆心到任意一个多边形的端点,也就是圆的半径,一直是不变的。

还记得前面做的那个动图,不变的是什么吗?不变的是边长。

为了方便在脚本里编写调试,我们将这个不变的半径设置成一个常量R。当然,在scratch里其实都是变量。

我们将边数也设置成一个变量Num。

https://cdn.china-scratch.com/timg/180922/1234364R2-16.jpg

固定出发点,调整好绘制方向

为了方便绘制,我们计划所有的正多边形统一从坐标系中的某个点出发,譬如坐标系中的点E{x=0,y=R}。

在scratch中,我们每次绘制一个正多边形的时候,都要将位置移动到{0,R}这个点,然后面朝某个方向开始绘制。

而对于正Num边形来说,这里我们取Num=6,也就是我们以正六边形为例。当我们把位置移动到{0,R}的时候,第一条线绘制的方向是不是线段DE的方向呢?

最初我们从圆心O{0,0}往上移动到E{0,R}的时候,是朝正北的,到了E点后,要转向到ED的方向,如下图所示:

https://cdn.china-scratch.com/timg/180922/12343CY4-17.jpg

通过上个动画的制作,我们知道所有正多边形的外角和是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边形是不是画好了呢?

完整脚本

完整脚本如下所示:

https://cdn.china-scratch.com/timg/180922/12343C506-18.jpg

完整效果图如下,和前面的视频相比,只是增加了随机色而已。

https://cdn.china-scratch.com/timg/180922/1234363136-19.jpg

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com