Scratch编程画分形几何图形系列76——“欧氏空间的枷锁”分形
- 任务描述:
前面我们画过六角形雪花,思路是将大的正六边形压缩分为六个或七个小的正六边形,前者是空心六角雪花,后者是实心的,在系列68也做过相切圆分形。
相切圆分形
本次我们用类似的思路,画一个将大圆压缩分为4个较小的圆的分形,与前面系列68的分形相比,区别在于四个小圆不一样大。分两组一组半径减半,另外两个分别与大圆和两个较大圆都相切。如下图所示。
保留每一级圆盘的圆内压缩1分4
欧氏空间枷锁
二、算法分析:
我们需要弄清楚上一级的大圆内的4个相互外切的圆的圆心位置和半径之间的关系。两个较大的圆半径R是大圆半径的一半容易看出来,而求两个较小圆的半径r和圆心位置,就要用一点儿平面几何知识。参看下面的示意图就可以得出,设最大圆的圆心到最小圆的圆心距离为d,则d r=2R, d,r R和R构成直角三角形的三边,由勾股定理就可得出另一个方程,联立解得r=2R/3,d=4R/3。也就是说,最小圆半径是最大圆半径的三分之一, 这样,我们要找的相对最大圆圆心的4个圆心位置和4个半径就有了。
一分四位置半径关系示意图
编程实现:
- 我们选择以中心为基准画圆盘,有更快速的画法,选择适当的画笔粗细,适当转两下就画出实心圆了。
用粗画笔画实心圆子程序
2.画“欧氏空间枷锁”的递归子程序:
3.为了把每一级画出圆都保留下来,我们可以分级调用上面的递归子程序。
或者将递归子程序稍作改动,调用一次递归程序即可。
改动递归程序部分
如果要把这个所谓的“欧式空间的锁链”分形图画出来,就调用前面那个递归程序一次就可以。
如果要把每一级的“欧式空间的锁链”呈现出来,就像以前那样做一个动画程序,每显示一级檫除一次。
三、拓展:1.把这里的圆盘换成圆内接实心正多边形怎么样?
正十边形替代圆盘
2.换成其他实物图形呢?
用实物图代替圆盘
3.仿照前面的方法,做一个如下图所示的正八边形向内压缩的分形图怎么样?
正八边形向内压缩的分形示意图
,