[分形]L系统[2]------Hilbert曲线的绘制
by EmilMatthew 06/02/13
1前言:
几个月前,初识分形时,我曾写有小作------分形几何L系统的实现
http://blog.csdn.net/EmilMatthew/archive/2005/11/15/529867.aspx
但是,当时,作为基本形状的Hilbert曲线我却没有绘出来,由于对数学上的把握及资料的不足,我无法判定问题出在哪里.最近,参考了相关资料,发现没画出的原因竟是程序里少写一个关于当输入字符是F即前进信号的判定!
2关于Hilbert曲线:
Hilbert是19世纪未,20世纪初的非常杰出的数学家。关于他最出名的事迹,要数在20世纪出提出的20个高难度数学问题,而Hilbert曲线则是他关于在生成图方面的研究.
关于Hilbert其人:
http://episte.math.ntu.edu.tw/people/p_hilbert/
http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Hilbert.html
Hilbert曲线在MathWorld上的介绍:
http://mathworld.wolfram.com/HilbertCurve.html
3关键部分:
关于L系统,除了我的那篇愚作可以参考一二外,还可去下面这个站点: (这个站点的文章有点”阴”,在关键性的地方都用一个Applet遮掉了,好像要输处密钥才能看到J)
http://www.arcytech.org/java/fractals/process.shtml
在L系统体系中,生成Hilbert也是相当简单简单的,只不过,这里多了一个需要迭代的符号:
迭代初始状态:
angle: 0
serial cmd sign: X
迭代主过程:
Xà+YF-XFX-FY+
Yà-XF+YFY+FX-
也就是说,对于生成曲线的命令字符串,在迭代n-1次后,对于第n次迭代。从左向右扫描n-1次迭代后的命令字符串,遇到X则用+YF-XFX-FY+代替,遇到Y则用-XF+YFY+FX-代替,其余命令符:’+’,‘-’,’F’则直接拷贝,当n-1次迭代后的命令字符串扫描完毕后,也就完成了n次迭代中命令字符串构建.
比如,Hilbert 曲线命令字符串迭代结果依次如下:
次数 命令字符串
1 +YF-XFX-FY+
2 +-XF+YFY+FX-F-+YF-XFX-FY+F+YF-XFX-FY+-F-XF+YFY+FX-+
Hilbert生成效果图:
4附录:
1算法测试程序下载:
http://emilmatthew.51.net/EmilPapers/06_09Hilbert/code.rar
注,该Flash程序通过加载外部xml来进行参数的设置:
在观看Hilbert效果时,当迭代次数为3或4时参数设定成如下值较宜:
a)迭代次数3
<inputDatas iterLimit='3' initString="X" SUBX="+YF-XFX-FY+" SUBY="-XF+YFY+FX-" fps='20' stepLen='25' pationCirN='4' offsetX="150" offsetY="300">
</inputDatas>
b)迭代次数4
<inputDatas iterLimit='4' initString="X" SUBX="+YF-XFX-FY+" SUBY="-XF+YFY+FX-" fps='20' stepLen='10' pationCirN='4' offsetX="150" offsetY="300"> </inputDatas>
若直接点击无法下载,请将下载的超链接粘接至浏览器地址栏后按回车.若不出意外,此时应能下载.