- UID
- 4723
- 帖子
- 752
- 精华
- 5
- 积分
- 1778
|
如何用代数法扫描J,M集合?
目前做分形主要是用几何法完成的,其实代数法也是一种不错的选择。我把代数法写出来供大家分享。
1.J集合的定义:z=x+y*i,c=c1+c2*i为两个复数。函数f(z)=z^2+c,
构建数列z1=f(z0),z2=f(z1),...,进行无穷次迭代后如果数列{Zn}保持有界,则说初始值Z0∈J集合。
J集合就是由所有这样的初值组成。
一个重要结论:如果复数z的模sqrt(x^2+y^2)>2,那么经过无穷次迭代后,必发散。
2.代数法绘制J集合的步骤如下:
a.创建参数x,y,c1,c2,n,zoom,trans1,trans2(共8个参数)
b.计算x1=x^2-y^2+c1,y1=2x*y+c2
c.描绘坐标点A(x,y),C(c1,c2),A'(x1,y1),
d.选中x,y,和n进行深度迭代:x-->x1,y-->y1.
e.选中迭代象,并打开变换菜单,点击终点象命令,得点An,并度量出点An的坐标
Xn,Yn。
f.计算esc=sqrt(Xn^2+Yn^2).
计算 x'=zoom(X+trans1),y'=zoom(Y+trans2)
描绘点zoomA(x',y')
g.选中点zoomA和计数值esc,打开显示菜单---进入颜色---参数---弹出参数控制颜色面板,确定ok。
h.选中参数x,和点zoomA,构建参数x驱动点A 的轨迹u.
i.创建运动参数y的动画按钮Y.,ok。
到此就获得了一个具有局部放大和定位功能的扫描J的方法。
也许你会怀疑,这样就具有了局部放大,定位功能?信不信你试试就知道了。
注意:
1.如何定位?
zoomA点就是定位点,你要放到那个部位把zoomA点移动到相应的部分就可以了。那么如何移动zoomA点呢?这只有改变参数x,y 的值就可以了
(可以利用小键盘的+,-号完成,如果发现点跑的太快,只有选择参数x右键属性修改,每次移动的
单位数就可以了)
2.如何确定扫描的范围?
再创建一个参数h,计算x+h,x-h,y-h,y+h.用这组值修改动画按钮Y的属性,和轨迹u的属性就可以确定一个小正方形区域。特别是轨迹可以拖动修改。如果你放大到1000倍,小正方形的边长可以设置成0.2.
3.如何放大?
修改zoom(缩放的意思,英文)参数就可以了。
4.放大后图象不见了怎么办?
参数trans1,trans2就是防这种情况出现才引入的。它门代表平移图象。
修改它们。特别注意几何画板的滚动条已经天然的给你指出了平移方向。
5.在放大过程中要不断的修改精度,最高精度为小数点后5位,这是系统提供的。
因为放大倍数越大,x,y的改变幅度就越小。此时的精度就越来越高。
6.我如果放大1000倍,按钮Y每秒的扫描单位如何确定?
按如下方法计算确定:0.1/1000.
7.我把图象的颜色设置好了,放大后图象的颜色会变吗?
不会。原因是我把参数强加给了原象,只要原象不变,其象是不受影响的。
8.如何构建圆形扫描线?
这只要使用复数的三角式z=r*e^(it),按上面的方法做就可以了。大同小异。
当然有个小问题也得要注意:就是用直角坐标系描点,用极坐标系求模和幅角。两种坐标系的转换只需要通过右键属性菜单就完成了。
具体公式如下:
r=1,t=1.5rad,c1=0.31,c2=0.30,n=3,zoom=2,trans1=1,trans2=1
计算:r^2cos(t)+c1
r^2sin(t)+c2
上面两个式用直角坐标系描点,接着用右键菜单把直角坐标系转换为极坐标系,并度量坐标,这样就得到了该点的幅角 t1 和模 r1。
迭代如下:r--->r1,t---t1.
变换式为:x'=zoom(r*cos(t)+trans1),y'=zoom(r*sin(t)+trans2)
余做法同上。rad---弧度单位,就像米用m表示一样。
9.如何引入两个比值zoom1,zoom2,就可以进行仿射变换。
10.这里的一切都是变换起的作用,变换也许是这个时代玩几何画板的潮流吧。
代数法的入门很低,可以说是目前分形入门最低的方法,没什么特别的操作技巧,可以这么说,搞懂了什么是J集合,天然就会扫描了,相信你会喜欢的。
实例文件在这里:http://www.inrm3d.cn/redirect.php?tid=4046&goto=lastpost#lastpost
--------------------------------------------------------------------------------
上面的扫描方法,J,M集合的外部是空白,要实现外部也着色,就要用这里的全区域扫描。这只要稍为修改上面的文件就可以了。
把上面的扫描增加一个特殊的相似变换:x0=boolean(esc)*x,y0=boolean(esc)*y,其中相似比boolean(esc)为一个逻辑变量,当点(x,y)在指定的区域外时取0,当点(x,y)在指定的区域内时取1,当点(x,y)在指定的区域外并距离原点大于10^308时,为∞,这只要这样构建逻辑变量:boolean(esc)=sgn(sgn(esc)+1),其中esc=2-sqrt(x^2+y^2)。其余类似于上面。
定位点zoomA的原象点(x,y)的坐标很重要,是下一步着色的参考数据。通过移动zoomA点获得相关数据。 |
|