勾股树,又称为毕达哥拉斯树。它是由古希腊数学家毕达哥拉斯根据勾股定理画出的一个可以无限重复的图形,因为重复多次以后的形状像一棵树,因此得名。这种图形也被称为分形图,它们中的一个部分和它的整体或者其它部分都十分相似,分形体内任何一个相对独立的部分,在一定程度上都是整体的再现和缩影。这就是分形图的自相似的特性。
我国古代把直角三角形称为勾股形,并且直角边中较小者为勾,另一长直角边为股,斜边为弦,所以把这个定理称为勾股定理。公元前六世纪,古希腊数学家毕达哥拉斯证明了勾股定理,因而西方人都习惯地称这个定理为毕达哥拉斯定理。
勾股定理的定义是,在平面上的一个直角三角形中,两个直角边边长的平方加起来等于斜边长的平方。用数学语言表达为
用图形来表达如下图所示
以勾股定理图为基础,让两个较小的正方形按勾股定理继续“生长”,又能画出新一代的勾股定理图,如此一直画下去,最终得到一棵完全由勾股定理图组成的树状图形,称之为勾股树,再恰当不过。
在《Scratch趣味编程进阶》一书的第7章7.5节“勾股树”中,介绍了使用Scratch绘制勾股树分形图的方法:1. 先画出大正方形作为基本形状;
2. 再以大正方形的上边作为直角三角形的斜边,分别在三角形的两条直角边上画出两个小正方形;
3. 重复在每一个正方形的上边分别画出两个小正方形,最终得到一个树状的图形。
上图展示的是一棵勾股树的部分“生长”过程,最终图形如下图所示。
通过上面两个不同的勾股树分形图可以看到,它们的区别是最基础的勾股定理图中间的三角形,一个是普通的直角三角形,一个是等腰直角三角形。由此可知,通过改变勾股定理图中的直角三角形的两个锐角的大小,将能构造出不同形状的勾股树。
下面我们以前面所介绍的勾股定理图为基础,分别使用Scratch和Python来编写绘图程序,代码如下。
上面的Scratch程序使用到了递归方法来绘制勾股树分形图,对于递归编程不熟悉的朋友可以阅读《Scratch编程从入门到精通》一书,书中第5章“过程”中对函数(过程、自定义积木)和递归调用进行了详细的介绍。
上面的Python程序来自苏老师正在编写的一本Python图书《Python????》(书名待定),预计明年春天万事物生长之时出版发行,有兴趣的朋友可以留意一下。
剧透完毕,我们接着说勾股树。使用Scratch和Python绘制的勾股树分形图如下。
Python中内置了小海龟绘图库,提供了和Scratch类似的画笔功能,可以用来绘制平面图形。经过对比,Python小海龟的绘图速度远逊于Scratch,使用加速模式也没有Scratch的快,但是填充功能则是Scratch没有的。因此,用Python小海龟绘制的勾股树更漂亮一些。
勾股树、分形图等是非常有趣的话题,对此感兴趣的朋友可以阅读《Scratch趣味编程进阶》一书的第7章《神奇分形图》,其中介绍了几种常见的分形图的构造方法。会Python的朋友,可以尝试着将Scratch代码翻译为Python代码,感受一下使用Python的小海龟进行绘图的乐趣。