返回列表 回复 发帖
代数法中M集合去掉外部环的方法:
首先得说清楚代数法的迭代过程:
1.(x,y)经相似变换x'=boolean*x,y'=boolean*y得点x0,y0
2.x1=x0^2-y0^2+c1,y1=2x0*y0+c2
这是第1次迭代记判断值为boolean1.但一个点的迭代象超出逃逸圆时,这个点马上被变换到了原点
(0,0)。然后从原点开始新的迭代,所以运算速度是比较快的。
3.但对于M集合比较特殊,因为M集合的起始点是(0,0),所以还要计算2个判断值
boolean1=sgn(sgn(2-sqrt(x1^2+y1^2)+1),
boolean2=sgn(sgn(2-sqrt(x^2+y^2)+1).
最后在着色时加入0/boolean1,0/boolean2(加入这个可以同时去掉两环,当然要把原来的轨迹删除了,从新构建轨迹相当于电脑里面的刷新),就可以去掉外部的两个环。

注意:1.J集合外部的两个环只要用0/boolean,0/boolean1就可以去掉,这是和M集合的细微的差别。

2.boolean是布尔代数创始人名字,表示逻辑判断。它的值就是两个0和1.
几何法中的这个逻辑变量是p=(1+sgn(2-sqrt(x^2+y^2)))/2,这种写法有个缺点就是点在边界上时p=0.5.所以p值不是逻辑值,当然这种写法不影响运算。
3.最开始我一直想在代数法中引入et,但我选择了放弃在代数法中引入et。我虽然不太明白et的妙用,但是我觉得,至少说我没有感到代数法的使用上,我必须要用et。而且在代数法上引入类似几何法的et是比较困难的。而逻辑变量到是一个很好用的量。
这里的逻辑变量boolean都是按如下法定义的:a≥0时,boolean=1,a<0时,boolean=0,定义方法如下:boolean=sgn(sgn(a)+1),当然也可以用我的逻辑工具包里的逻辑工具直接求算。
4.为了去掉最外面的环,我真走了弯路,就是老想用用几何法的逃逸时间,要是一开始我就直接用逻辑变量去作,这个去掉外环就很简单了。人有时就是一根筋。呵呵。
  分形就是穷折腾,没有外环想外环,有了外环去外环。外环都去玩了那还要全屏干吗?答曰:俺们就喜欢折腾,折腾好了就毕业了。
距离作图二:


d
(这个图去掉了等势线,原理方程x^2+y^2=r决定色的走势,改变它!)


点(x,y)的走势决定色的走势,环状的色意味着点走圈装,如果把点的走势更改为双曲走势,线性走势色的走势也差不多是那种走势。
环是有基本方程x^2+y^2=r^2导致的,改变它,必可以改变色的走势。这一点给了我们玩分形自由发挥的空间。
千变万化等式线上色是基本功。
等势线上色可以统称为距离上色---D法(distance)。在用分形的图探讨问题时没必要把精力花在把图做精致上面去,最关键的是图能说明原理,图是不是验证了自己的想法。不断的验证自己的想法就会进步。
为了避免混乱代数法记号约定:距离:用dist(distance)表示。
点的坐标用:xn,yn表示,n=迭代次数
点用:A,An,C,b,bn表示。
距离比用:dr(distance ratio)表示
单参数着色:用H表示着色参数
三参数着色:用R,G,B,或H,S,V表是参数,用r,g,h表示颜色的混合比,或用h,s,v表示H,S,V的比值。
逃逸时间:esct(escope time)
fractal-tool工具包:主要是三个工具一个是逃逸时间计算工具esct,一个是反点计算工具invers point。还有就快速显示不同的c对应的J集合的工具(迭代次数控制到6以下,这时有点4(2^6+1)=260个点),避免盲目乱输参数。

实例文件.gsp (87.73 KB)

7b-fractal tool.gsp (56.03 KB)

主要是逃逸时间计算工具

20# xiaongxp
1.用参数控制色彩,和你们用线段控制色彩那个快,我还真的不知道。我只是想既然几何画板提供的就是参数控制色彩,所以我就想尽量用系统的东西,我想尽量的用系统的东西会减少运算量,会提供运算速度。我迭代到2000次,放大到100万,我的单核机子还可以走。我想代数法是比叫快的。
我用参数控制一切主要是为了书写变换方便,而且写完了运算分形的扫描全都具备了,不用另外添加东西,我控制色彩都用参数其实是用原象的,是便于把一切加到原象上,而象我可以很方便的放进行处理。相当于原象是核,我只要控制好核,就可以了。用参数控制色彩主要是构思自然不需要特别的训练,源文件容易转手给别人,别人容易看懂。你最有发言权几何代数两法你都会。如果从普及分形的角度看,我就要大力推荐初学则学习代数法。因为这种方法便于交流。传统的方法有许多优点,但缺点也不不少,起码拿着源文件很短的时间内初学者是整不懂文件的的。
2.真不好意思,你们的源文件我没有完全搞懂一个或者说我几乎看不懂,主要是我对你们的用的框架一无所知,如果不是你耐心的给我解释et是什么,到现在我也不清楚你们的et是什么意思,逃逸时间我知道,但是就是过去一直没懂你们的et是什么,到是看到了xue的全屏的文字意思,我就直接做了,做时也没多想。一次就成功了。取环上受et的影响反而走了弯路,后来我放弃了算et,直接用逻辑判断,去环就直接成功了。
3.我的算法是逃逸时间算法。只是我没有et的计算公式。因为求出的是et的最后值,对我没多大用处。
4.我用变换把跑到逃逸域外的点拉回到原点,这和拉到其他的地方无本质的差别。
5.上色问题我的处理思想是:因为势可以理解为阶梯性跳跃的函数(指J集合,当然在在M集合中势关于C是连续的,所以处理M集合的上色要比处理J集合的上色约为简单些),我就是要想办法让势连续变化,不要跳跃,这样就可以让色彩连续变换,以就是你说的平滑过渡。所以我就用势/初相距离,或用势力/第一次迭代象的距离,这两个变量都是连续变量,用它们上色就可以实现色彩的过渡。
6.你们的et用来上色我听你说,我理解的意思就是把势连续化,从而实现你说的平滑过渡。要实现平滑过渡不一定要用et。
7.由于绘制J,M集合,我们关注的是它们的收敛点的图,如果迭代的点列是z1,z2,。。。,zn,。。。,如果这个序列有收敛的子列,那么这个子列的后像距离与其前项距离的比几乎是压缩的,即z[n]/z[n+k]=a<1.而这个量是连续的,值∈[0,1],这特别好,只要把颜色面板的色宽设置成【0,1】就可以方便上色了。特别地可以把后像距离与前项距离的比用z[n],/1,或z[n]/z1,或z[n]/z2,z[n]/z0代替。实验的结果是效果还是不错的,而且运算速度也不错。而且这种方法可以把内部和外部较好的对接起来,原理也不复杂。还有一点:分形的IFS定义我看到是这么说的的:一组压缩映射的吸引子通常就是分形。这说明距离之比几乎小于1有着理论支持。
8.你所的像素上色法,我真的不知道是怎么回事,你能说详细点吗?我对分形就是瞎琢磨,如果都弄明白了分形我就不玩了,因为那时分形就不好玩了。呵呵。老巷的东西多。我想听听你们的上色法,我真的无法看懂你们的文件,主要是框架恰注我的,我基本不知道你们的框架那么是干什么用的。
关于代数法的逃逸时间(escope time)如何创建~逃逸时间可以是负数:
假设迭代次数是n=100,这第一环对应的esct=-100,第二环对应的esct=-99.
而相似变换的比boolean=0时,对应最外面的圆之外的部分。
代数法中使用逃逸时间还不如直接使用判断值方便。计算出前两次迭代的判断值就可以了,这样既方便,也大量的减少了迭代次数。
到此代数法已经可以很好的完成分形绘制了,剩下的就是丰富算法了。基本的算法在上面已经贴出来了。对于分形的入门足够的多了。
上面的碧云山庄图,就是用0/(esct+100)+0/(esct+99)去掉外环的。逃逸时间为负值,完全出乎我的意料之外。不过想想也合理,
因为代数法是点到达边界后被拉到了原点,从此这个点再也逃不出去了。迭代次数为100次,这个点就在区域内迭代100次,从不会跑到区域外面去。所以逃逸时间只能是用负数表示。真是没想到代数法逃逸到边界的时间居然可以是负数,合理,这合理。
逃逸时间请用上21楼的7b-fractal tool包中的工具完成,当然也可以直接求算。一般不要提前算,要用时才算,以减少运算量。
最后感谢老巷老师一再建议和介绍逃逸时间,所以才最终在代数法中推算完成了逃逸时间临界值的计算。
此外代数法的逃逸时间有如下四个取值:
假设迭代次数n=100,那么逃逸时间esct=-100,-99,0,1.
到处几何法的参数代数法都全有了。几何法能做的事情代数法都可以完成了。
付:逃逸时间计算公式:t=0-->t+1(n=迭代次数),完成迭代后取代如下:t被boolean1取代,
1被boolean2-1取代。或者说迭代关系是为boolean1,boolean1+boolean2-1,。。。.
值对应0,0对应-1,-2,-2,。。。
      1,1对应1,1,1,。。。。
      1,0对应0,-1,-2,-3,。。。。
      0,1对应0,0,0,0.。。。
也就是说用迭代次数n+esct=0,1,...习惯,这个值就对应一环,二环。
============下面是正逃逸时间推导====现已经把逃逸时间改为了正数==============================
由于几何法已经习惯使用正逃逸时间et为了配合几何法的et,现在把代数法的逃逸时间esct更改为正逃逸时间:
构造方法:t1--->t1+1(n为迭代次数,就是J,M集合使用的迭代次数),完成迭代后进行如下取代:
t1---用boolean1取代,1---用boolean2.即可。
逃逸时间用esct(escope time)表示。由于初始值分别为(0,0),(1,1),(0,1),(1,0)所以逃逸时间分别对应四大类。
其中esct=0对应1环,esct=1对应二环,这样就和几何法的逃逸时间一样了。但是有一点不同,几何法的逃逸时间最大值通常比迭代次数n小的多。
但代数法的逃逸时间最大值可以是:n+1,最小值可以是0.原因是代数法的逃逸时间可以是无界的量。
工具在21楼的fractal tool包中。负逃逸时间也被我删除。取调一环,二环其实直接用逻辑变量boolean1,boolean2就可以了。代数法的逻辑变量要注意前三个,它们分别对应最外面的三个区域。
最后再次感谢老巷提供逃逸时间的概念。
小结:
1.到此代数的构架全部完成。利用代数法可以进入分形的天地了。
2.几个重要的概念:
逃逸时间esct,逃逸域(通常是圆,可以变为其它的如带型),各种距离dist,距离之比dr,震荡变量osc,震荡域,震荡半径,极限点,周期圈。
逻辑判断boolean(如果你不像每次都求算,可以用7b-logic tool中的布尔值求算工具完成)。
反点inv。∞,undefined,
象距离dist,初象距离dist0,边界距离esc,势的概念,势的跳跃性和势转换为连续变量,等势线(equipotential line,一般等势线为contour line---CT)
从另一个角度sqrt(x^2+y^2)=r就是上色时点(x,y)的轨道方程,它决定了色的走势,是圈状还是线性,多大的圈,圈的范围在哪里。更改方程当然会出现不同的效果。
还有就是简单的着色知识三原色,复色,间色,饱和度,明度,色相。冷热色调,补色的概念,关于色的概念大致了解一点就可以了。主值区间,色宽,常色区间。有的名字是我创建的合不合理不要紧,有个名字便于交流。各种距离上色(D法)
3.R,G,B(或H,S,V)的构造:
R=rF,G=gF,B=bF,F关联到象点的距离,这样r,g,b之比就可以调试色彩,这只是基本结构,可以变化,不过这个模式是很好控制色彩的,如果曾经画过画的人,一看就明白道理。
F常用三角函数,或三角级数,负幂级数,trunc函数(周期性跳跃),x/T-trunc(x/T)值域为0~1间变化的一个周期函数。对F的平移,对F的伸缩都是常用技巧。常常绘制出F的函数图象配合色宽控制上色。上色时有时还要大致估计有没有极限点(就是f^n(z)的不动点),极限点常用来测试距离,并可以完成对极限点的强调突出。在J,M集合的外部加环,并设置环的大小数量,位置这是osc震荡完成的。
学习分形就从最基本的距离函数按上面的模式上色入手。
基本配色公式:R:G:B=1:0:0=红,R:G:B=1:1:0=绿色,了解点这种知识是上色必须的,我的这部分知识是我读书时学美术学的。我从小学到大二一直在学美术。
我的体会
学习分形开始千万要回避那些复杂的分形,入门越简单的例子越好,最好就是一个例子反复练,从不同角度练。分形的参数有x,y,c1,c2,dist,osc ,esct,dr,R,G,B就用一个例子把这些参数一个一个的变化,当你把每一个参数的变化都体会完了,分形就入门了。更好的方法是先抛开分形,做一个直接进行扫描上色练习,然后在进入分形,这样学习效率更高。
学习分形要入门1小时的课时足够了。要做到熟练学什么都有一个过程。我把这些写出来是为了让后来的学习者能直接进入分形,不要去走弯路,在初学时把无谓的精力花在做复杂的花哨图形上去,偏离了本质问题的学习。分形上色的原理不复杂,创造靠你自己。如果不想深入的研究分形,对大多数人来说,D法足够了。此外不要迷信esct的作用,它不是万能的。
遗留问题:现在我的上色停留在空间坐标系的z轴退化成一点的情况下上的色,这个空间坐标系装在我的心里,是一个虚拟的坐标系。现在想探讨一下虚拟的空间坐标系的z轴不退化成一个点时如何上色?
回顾:
我为什么用代数法?记得几年前,我在中国画板网就发过M集合的扫描,那就是我的第一个分形,后来我再也没玩过分形了,后来我发现几何法创建框架就麻烦,偶然我就试试代数法,发现代数法直接就可以扫描,而且不用多构思什么,就按自然的想法就完成了扫描,所以我觉得代数法扫描没有“技术”含量,每一个人看一眼就会。后来我就拿着试试,居然成功了,刚开始我使用的是H,S,V上色,因为H,S,V的含义能比较容易的和距离挂钩。当H,S,V成功后就推广到R,G,B.整个探索的过程体现了特殊到一般的思想。探索比知道结果更有乐趣,玩几何画板我理解就是打麻将,都是玩。
20# xiaongxp
你所的像素上色法,我真的不知道是怎么回事,你能说详细点吗?……我基本不知道你们的框架那么是干什么用的。
myzam 发表于 2012-11-4 22:42
计算机绘图的过程,就是对屏幕特定区域的每一像素点定义颜色的过程。扫描框架就是为屏幕划定这个绘图区域。我们先在屏幕的任意位置作一独立点,它的坐标占据一个像素,将终点z[et]的色相定义在上面,它便是一个迭代路径的起点z[0]。将此色相变换到扫描线上,扫描线上的每一个像素点都是相应迭代路径的起点,如果其采样数是500,它便对应500条迭代路径。随扫描线的跟踪移动,就将扫描框内所有像素点用相应终点色相赋以了斑斓的色彩,从而形成美丽的分形图形。
24# xiaongxp


哦,明白你的意思了。变换是种思路。这个我还是比较熟悉的。但是那种方法更快,要做了实验才知道了。

一个思考

用势上色,为了使色彩渐变,就要把势连续化,上面的求的的esct是跳跃的,如果在推导esct时,
加入连续的因子,得到新的esct,把新的esct再和象距离配合,就可以把势改造成连续的变量,这样的思路去上色会怎么样?
逃逸时间变量esct的临界值
假如迭代次数n=100,此时esct的最大值=n+1=101.
这个临界值是使用方法是:
0*sqrt(esct-101)与0*sqrt(101-esct),这样使用可以挖去环。
另两个值的使用方法是:0/esct,0/(esct-1).
把它们加到R,G,B的一个参数中就可以挖去环。
101临界值也能这么使用:0/(esct-101).
对于101临界值还可以采用对数挖环:象这样0*ln(esc-100)等等。
关于逃逸时间的再说明
1.看看esct的推导过程
t1=1,t2=t1+1,J集合的迭代次数是n,迭代关系为t1-->t2=t1+1,
迭代完后t1用boolean1取代,1用boolean2取代。
这里的boolean1是J集合的第一次迭代象的逻辑判断值,boolean2是J集合的第2次逻辑判断值,它们的作用就是判断点(x1,y1),(x2,y2)是否跑出逃逸区域。
计算公式为boolean_i=sgn(sgn(2-sqrt(x_i^2+y_i^2)+1)) (i=1,2,3,...).
所以当J集合的(M集合也一样)的n=1时,esct也被迭代了2次,当n=2时,esct被迭代3次算出来。
所以当n=100时,esct的最大值就会出现为101,这就是esct的最大值是n+1的原因。
结论:当J集合的迭代次数是n时,逃逸时间esct是通过n+1次迭代算出来的。
由于boolean1,boolean2的值由四种可能0,0;1,1;1,0;0,1,
从而esct的值有四类。其典型值为esct=0,1,n+1.这是它的三个最典型的值。
相似变换的判断值boolean=0对应最外的区域,esct=0或boolean1=0对应1环,esct=1或boolean2=0
对应2环。
2.点列{An}的周期性说明
猜想:设f(z)=z^2+c,c=c1+c2*i,构造序列{zn},其中z0=x0+y0*i,z[n]=z[n_1]^2+c,
当c固定时,序列{z[n]}为一周期数列。(全屏迭代时)
例如:c=-0.73-0.3i时,序列{zn}的周期T=14.
由这个猜想出发可以看到逃逸时间esct可以改造成关于n的周期的函数,这个周期性未证明,只是一个实验结果。如果能证明那是非常漂亮的一个结论。能给出周期的计算公式那就更好了。这个周期性猜想可以简单的记成:z[n,c]=z[n+T,c],或者说成:
猜想:代数法全屏迭代时,象点的轨道关于迭代次数是周期性轨道。
如果初始点确定为原点,跌代若干次后这个点跑到了逃逸域的外面,就会被再拉回到原点,开始新的周期性迭代,从而点zn的轨道具有周期性,但是其他情况如何证明?不知道就了。
这个猜想是重要的它关系到确定最后的临界逃逸点是谁。
29# changxde
那些文章很好。谢谢。
把微分离散化称为差分,是计算数学的基本技巧。差分法(deference method~DM)解决的是计算问题,即微商的离散化,解决不了周期性问题。
返回列表