这是寒假最后一篇文章了。分形,在使用繁体字的地方叫碎形,是完全由数学家创造的图形,现在常用于装饰图案,体现了数学的美。1973年,曼德勃罗(B.B.Mandelbrot)在法兰西学院讲课时,首次提出了分维和分形几何的设想。分形(Fractal)一词,是曼德勃罗创造出来的,其原意具有不规则、支离破碎等意义,分形几何学是一门以非规则几何形态为研究对象的几何学。
雪花分形就是下边的图形。
看起来很不错吧,我是用C++写的,然后又改写成php。这个图形很有名,在初中数学书中就出现过。
常说自然界是三维的,加上时间是四维的,在数学里是可以无限维的。介绍一下分维的概念,我们首先画一个线段、正方形和立方体,它们的边长都是1。用1/2的长度去度量图形,而将原图等分为若干个相似的图形。其线段、正方形、立方体分别被等分为2^1、2^2和2^3个相似的子图形,其中的指数1、2、3,我们称为1维2维3维。一般说来,如果某图形是由把原图缩小为1/r的相似的k个图形所组成,有:
r^d=k,则d是维数,取对数,用换底公式得d=(ln k)/(ln r)。
雪花分形,也就是著名的Koch图,用计算机绘制它当然想到了递归的方法,递归一定要有一个退出递归的条件。也就是要制定一个维数d,转化一下,就是制定一个最小的长度r,当到达这个长度时就开始绘制。下边是示意图,每次三等分线段,突起一个新的正三角形。

下边是php的代码,其中nMax就是一个绘制的长度。利用一些数学推导,求出各个点,然后递归函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <? //定义函数,Koch绘图算法 function Draw($x1,$y1,$x2,$y2,$color,$img,$nMax) { if(($x1-$x2)*($x1-$x2)+($y1-$y2)*($y1-$y2)<$nMax){ imageline($img,$x1,$y1,$x2,$y2,$color); } else{ $x3=$x1+($x2-$x1)/3; $y3=$y1+($y2-$y1)/3; $x5=$x2-($x2-$x1)/3; $y5=$y2-($y2-$y1)/3; $D=sqrt(($x5-$x3)*($x5-$x3)+($y5-$y3)*($y5-$y3)); $alpha=0.0; if($x5-$x3==0)$alpha=3.1415926/2; else { $x=(float)($y5-$y3)/(float)($x5-$x3); $alpha=atan($x); } if($x5-$x3<0) $alpha=$alpha+3.1415926; $x4=$x3+cos($alpha+3.1415926/3)*$D; $y4=$y3+sin($alpha+3.1415926/3)*$D; Draw($x1,$y1,$x3,$y3,$color,$img,$nMax); Draw($x5,$y5,$x2,$y2,$color,$img,$nMax); Draw($x3,$y3,$x4,$y4,$color,$img,$nMax); Draw($x4,$y4,$x5,$y5,$color,$img,$nMax); } } //GD绘图 $im = ImageCreate(300, 300); $color = ImageColorAllocate($im, 0,0,0); $color_draw = imagecolorallocate($im, 255, 198, 128); // Draw(50,200,250,200,$color_draw,$im,$nMax); Draw(150,27,50,200,$color_draw,$im,$nMax); Draw(250,200,150,27,$color_draw,$im,$nMax); // Header("Content-type: image/png"); ImagePNG($im); //输出图像 ImageDestroy($im); //销毁内存里的图像,释放内存空间 ?> |
雪花的主框架可以改变,这里用的是正三角形,分别绘制了三边,如果正六边形的框架也是很好看的。快去试试吧。这里有我做的php和html5雪花分形的测试地址,可以试试传递不同参数时绘制图形的不同。
很喜欢这个博客,能和你换个友链吗
不好意思,我不想和你交换。因为我对你网站内容不感兴趣啊
头大了,看不懂啊,我中专的时候函数貌似就不好。
没事,我写的不明白。最后不用求对数,就是正三角形,从顶点作高。
好复杂啊。。。最怕数学了,不过雪花还挺好看的
不复杂的,求对数只是为了说明一个概念。实际画雪花时,转化了一下,很容易的
高端啊。。。
非也,我就会这些了