返回列表 回复 发帖
显示整数的所有正约数:http://www.inrm3d.cn/redirect.ph ... o=lastpost#lastpost
制作教程。。。。。
95# inRm
又是一种制作Bezier曲线的方法,好啊。
何为Julia (茱莉亚)集合?

--------------------
由此可以看到Julia集中的表达式f(z)可以是任意的解析函数,并不是只可以是f(z)=z^2+c
,当是不得不承认通常都取f=z^2+c,Julia集是对解析函数f(z)进行迭代,一类点趋于∞,一类点不趋于∞,这两类点的分界点组成的集合就是Julia集。Julia集合可以不是分形!网络上有太多的关于Julia集合的图像,基本上使大家认为Julia集就肯定是分形。说Julia集合不一定是分形反而会让人吃惊,然事实就是这样。
98# xiaongxp
最近我在看一篇文章,我到是接受作者对分形的解说。作者说:许多人多希望给分形一个精确的定义,但是无论什么样的定义都不完美,总会把一些本来是分形的集排除在外。所以作者告诉看官,对待分形应该象对待生命一样,没有人可以给生命下个定义,但人们可以给出生命的一些特征,人们通过这些特征就知道什么是生命。

Julia集的图形绘制

Julia集的图形绘制通常都是扫描完成的,其实M集和J集的图形不扫描同样可以完成。扫描画图有很多优点,但有一个缺点就是每次打开几何画板都要重新扫描才有图形产生,而且参数对图形的影响观察起来并不方便,那么能不能克服这些缺点呢?我试了试可以办到,把文件放到这里共探讨。
M集定义={c|c值使J集合连通}
J集定义={z|用f(z)=z^2+c进行无穷次迭代,其迭代像保持有界的初值z}
关于J集的定义,这里是指其边界。边界和内部叫“充满的J集”。J集的定义可能约有差别。容易在理论上证明J集是有界闭集,从而是紧的。
J集合连通的定理:J集要保持连通除非z=0的无穷次迭代像有界。就是说如果J集连通,则0∈J
定理:|z|>2的初值进行无穷次迭代后,跌代像必无界。
一个构造Julai集原象的迭代过程:设 f(z)=z^2+c, f 的反函数记成 g(z)=±sqrt(z-c).
D={z| |z|≤2},f作用在D上的像f(D),要保持k趋于∞时,迭代 f^k(z)有界,只有点f(D)∩D才满足条件。
把集合f(D)∩D放宽到D,计算g(D),约去|g(D)|≥2的点,只关注模不>2的点。只有这样的点菜有可能落在J
集合中。那么如何计算g(D)呢?从f的反函数的表达式不难看出可以这样计算:这只要把D平移 -c,得区域D1,,再对D1中的点开方就可以了。反复重复这一过程,最后就可以得到JULIA集。
由这个迭代构造可以看到f的反函数有两个连续的分支,显然如果J集不连通它的不连通分支就会成对的出现。假如说这样的连通分支不断的分裂下去,无穷次迭代后,最后的J集就是孤立点组成,这时J集是画不出图像的。如果我们用轨迹法作图就可以亲身感受到连通分支的断裂过程。那种1分裂为2,2分裂为4,4分裂为8的感受很真切。

11页的J SET 的边界曲线就是用反函数的方式构造出来的。



不扫描同样可以绘制Julia集.gsp (6.25 KB)

不扫描同样可以绘制M集.gsp (6.13 KB)

演示:M集的定义=J集的连通性.gsp (9.13 KB)

101# math
的确是这样,但是轨迹法虽然速度上不去作的图也不够精美,但是对理解认识M集合,J集我个人认为比比扫描法更胜一筹。如果只是画图而言,扫描法作的图肯定更优美。其实对我使用的电脑来讲,两个方法速度都上不去。
网上一篇写的很棒的关于Julia集的文章
这片文章最精彩的地方就是深入浅出的讲明白了为什么M集进行迭代时要从初值0开始,或者说把M集的定义讲的非常透:
Julia集的定义J={z_0|z_n=(z_n-1)^2+c,n->∞时,|z_n|有界}
M集的定义如下:M={c|c值使Julia集连通}
作者独到的采用反推原象的办法阐述了M集的定义,把概念的形成过程展示给了读者,非常棒!并分析了为什么有时候Julia集是一些孤立点。作者最后归结得出:J集如果含有原点,则J集是连通的。同过对着这结论的归结让读者深切的感受到原来M集跌待时要从初值0开始,原来如此,给人一种恍然大悟的感觉。这些结论在书籍<分形几何-数学基础及应用 (英 法尔科尔)>中都有,但是不容易读懂。


利用变换制作Julia集的边界曲线,观察J集的不连通性。
-----------------------------
数学分析中的等势线定义:曲面Σ:z=f(x,y)与z=k的交集,投影到xy平面叫Σ的等势线。
等势线上任取一点p,则f(p)=k。
复变函数中等势线的定义:设w=f(z)的反函数为w=g(z),如果g(z)把一簇不相交的同心圆映射成不相交的曲线系C,
就说曲线簇C是函数f(z)的等势线。显然f将把等势线映射成一簇同心圆。所以在同一等势线上,f(z)的模为常量。
这样就可以得到复变函数f(z)的等势线的等价定义:w=f(z)的模为常量,z的轨迹就构成了f的一条等势线。
上面的文件就演示了Julia集合的等势线。这是用等势线逼近J集合的方法。
Julia集合的等势线定义:设f(z)d的反函数是g(z),g经过n迭代后记成g^n(z),圆进gn次迭代后的象叫Julia的等势线。
这个定义等价于:如果曲线C由f(z)迭代n次成为圆,即|f^n(z)|=r,就说z的轨迹,即曲线C为Julia的等势线。
你可以再上图的等势线上取一点,用f反复迭代,最后等势线就会变成一个圆,就同一等势线上迭代到一定次数时模相等。

Julia集的边界曲线.gsp (22.49 KB)

演示J集的连通性.gsp (8.79 KB)

如何用代数法扫描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点获得相关数据。

代数法全屏扫描.gsp (17.9 KB)

用代数法扫描J,M集合时能否用自建坐标系完成?
  可以。这只要在平面内任意取不共线的三点,O,P,Q.
O---作为原点,P---作为X轴上的单位点,Q---作为Y轴上的单位点。
如果仔细的读过这个版块,就知道变换菜单下的缩放命令其实就是仿射坐标系下的描点工具。
用系统自带的缩放命令描点就可以脱离开系统坐标系在自建的仿射坐标系下绘制J,M集合的图形。
返回列表