函数也可以如此美丽——Julia 集的分形艺术微博:@月绒兔子前言大家在高中的时候都学过解析函数吧?说解析函数是不是有点显得太高端了?那好,给你一个 y=x 的函数,在 XY 坐标系上画出这个函数的图像。别告诉我你不会啊,这可是拿脚后跟都能画出来的图像啊。闲话不多说了。首先,先声明下此文并不是给大家讲数学的,也不是专门给理工科童鞋看的。此文的目的就是想让大家知道,有那么一个函数,她是如此的奇幻如此的美丽多变,就像她的名字一样—Julia。然后我们用 HTML5 的 canvas 来召唤她。先来几张 Julia 的芳容欣赏下:没错,以上四个图片不是电脑桌面,但是它确实 Julia 集合(Julia Set)所描绘的抽象艺术。Julia 集简介我是在一门叫做“高等统计物理”的课程上认识到 Julia 集的。虽然她的图像非常绚丽多姿,但其实她的真身非常简单,简单到你不敢想象:f(z)=z^2+C其中,z^2 表示 z 的平方,z 和 C 均为复数(复习一下:复数就是 a+ib,a 为实部,b 为虚部,i 就是表示虚部的部分)。然后我们做以下的迭代:Z1=f(z0)Z2=f(z1)Z3=f(z2)Z4=f(z3)…那么当 Z0=0,C=0.5 时Z1=0^2+0.5=0.5Z2=0.5^2+0.5=0.75Z3=0.75^2+0.5=1.0625Z4=1.0625^2+0.5=1.62890625Z5=1.62890625^2+0.5=3.653355…Z6=Z5^2+0.5=14.346860796…最终 Zn 趋于无限大。同理,如果令 Z0 等于另一个值时,有可能会出现最终 Zn 收敛于某一值(无限趋近于某一个值),也有可能趋近无穷大,或者趋近无穷小(负值)。Julia 集绘制原理上面的简介说明了其实 Julia 集就是一个迭代函数而已,那么,这么美丽的图像是怎么画出来的呢?其实很简单,刚才我有提到过,z 和 C 都是复数,C 是常量。所以,z=x+iy,C=a+ib,图像是以 x 为横坐标,y 为纵坐标绘制的。这么说来,只要随便改变a 和 b 的值,就会出现不同的图案了。那么图像中颜色是根据什么来的呢?我们从画布左上角第一个像素(x=0,y=0)开始,这个像素所代表的物理意义就是,当 z=0+i0(也就是 z=0)时,进行 Zn 的迭代计算。我们预先设置一个阀值 k(例如 k=4),当计算到Z10 的时候,发现 Z10 的模大于 k 了(|Z10|>k),就说明在迭代到第 10 次的时候发散了。依此类推,如果是计算到 Z88 的时候|Z88|>k 了,就说明迭代到第 88 次的时候发散了。这时候你就可以按照你的口味来了,你可以设置为发散的越慢(迭代次数越多)颜色越深,发散的越快(迭代次数越少...