编程技巧分析 画五角星和正五边形★~★★
单独画一个五角星或单独画一个正五边形都是非常容易的事,也就是Very
easy!但是要求把两个图形准确地套在一起画,就有些麻烦了。

这里面的原因在于:假如确定AB的长度是200,那么AC的长度是多少呢?要准确地计算AC的长度需要初中数学的知识——可是小学生的计算机程序设计竞赛就考试这个呀!怎么办呢?方法是有的。大体上有以下两种办法。
查找画五角星和正五边形原有题目的链接
第一种办法:“试”、“猜”或者“蒙”!这可是许多编程“高手”屡试不爽的好方法。
正确的思路是这样子的:先编程画出一个边长AB是200的五角星,然后随意定一个边长AC,画一个正五边形。然后在LOGO作图窗口输出图形。

事实证明:哪怕是现场进行竞赛,耐心调整AC的长度,试上几次就能够画出准确的图形来的。总之, 在一时搞不懂某些数据的时候,“试”,是一种重要的技巧。
经过“试”,当AB=200时,AC大约等于122~125就能画出满意的图形。按这样思路编写出来的程序如下:
TO
WUXING1
DRAW HT RT 18
REPEAT 5[FD 200 RT
144]
LT 36
REPEAT 5[FD 123 RT
72]
END
第二种办法:计算。准确地计算AB、AC的长度需要进行严格的数学演算。AB、AC的长度比是符合“黄金分割”比率的。
这个比率是一个无限不循环小数,它的前几位等于0.618033988749……或者说等于((SQRT 5)-1)/2。(说明:这个公式的证明从略)
这个“黄金分割数”有着极为奇妙的性质:
AC/AB=0.618……
AB/AC=1.618……,或者说
AB/AC=1+0.618……
有了上面的这些数学知识,那么编程的方式就很多了。这里随便举几个例子。
直接使用0.618编程的例子(用3位小数精度已经够用了):
TO WUXING2 :L
DRAW HT
MAKE "K 0.618
RT 18 REPEAT 5[FD :L RT 144]
LT 36 REPEAT 5[FD :L*:K RT 72]
END
如果要求再高一些,使用((SQRT
5)-1)/2,先画五角星、再画五边形的例子:
TO
WUXING3 :L
DRAW HT
MAKE "K ((SQRT
5)-1)/2
RT 18 REPEAT 5[FD :L RT
144]
LT 36 REPEAT 5[FD :L*:K RT 72]
END
另外,这里再介绍使用((SQRT
5)-1)/2作为长度系数,画5个三角形ABC组成我们所需要的图形的例子:

编写这个程序需要一定的想象力:编写一个子过程画三角形ABC,画笔的路径是A-B-C-A-B,这样子就能够把三角形ABC作为五角星的一条边来使用。5个这样的三角形,就组成了我们所期望的图形。
TO WUXING4
:L
DRAW HT
MAKE "K ((SQRT
5)-1)/2
RT 18
REPEAT 5[FF :L RT 144]
END
TO FF :L ;画一个ABC三角形的子过程
FD :L LT 144 FD :L*:K
LT 72 FD :L*:K LT 144
FD :L
END
有人会说,这样一道题有必要讲解得这么麻烦吗?反正林老师觉得很有必要。这样子算是透彻地理解——并不是为了应付考试。林老师教过许多学生,都要求哪怕是最简单的程序都要透彻地搞清楚其中的细节原理。经过这样严格训练的选手,最终都成为编程的高手。
这里是LOGO语言初学者的进修学院
凡有发现图片消失
敬请在评论中告知
以 便 及 时 补 充 修 复
欢迎评论 欢迎转载
查阅林老师最新发表文章的链接:
http://blog.sina.com.cn/lzs2099
快速检索数百篇博客提高阅读效率的链接:
《LOGO语言简明教程》目录及初学者题库
《LOGO语言画图编程题》目录
《LOGO语言数学计算编程题》目录
《LOGO语言竞赛标准试题》目录
《LOGO语言编程新理念及编程技巧》目录
《奥数及趣味数学问题》目录
《LOGO语言竞赛教程·习题集内容剖析》目录
《林老师话说天南地北》目录
初学者题库——集初学者练习大全
查看林老师拍摄及推荐的照片的链接
林正山老师邮箱:
linzhengshan@21cn.com
因网络拥挤“纸条”常不能及时打开查阅。有信息尽量使用“评论”或邮件。
需要LOGO系统文件、常用表格及工具程序文件的可以发邮件给林老师
声明:
林正山老师发表的文章及照片,媒体、网站或出版物未经本人许可谢绝进行任何形式的删节、改编、重组及转载。
允许个人博客按原文(含图片及附注)进行完整转载,转载时敬请注明本博作者姓名、文章原始出处,并以链接形式标明来源。
加载中,请稍候......