返回列表 回复 发帖
用震荡描述分形的外部,用距离函数描述分形的内部
下列图片和上面的的图片都是基于同样的一个模型:f(z)=z^2+c,c=-0.5+0.5i的J集合。















上面的图片只用了一个距离即象距离,图象显得工整相当于是国画中的工笔画,如果把初象距离,边界距离和逃逸距离都用上,就会产生一种类似国画中那种写意的色彩,相当于国画中的写意画。
从函数的观点来处理上色,如果上色时同时绘制出函数图象,通过上下平移函数的图形改变函数的值域或通过调整三角级数部分和的系数,当然调整这些参数时要观察函数的图形变化,并把扫描线调到最粗,两者结合就可以比较好的控制上色,这样上色就在一定范围内成为可控制上色,极大的减少了运气上色。上色就像绘制函数的图象一样,只要敢想就可以创建出奇形怪状的色图来。
我使用的基本震荡因子是1/sqrt(x^2+y^2),这个因子可以变形,比如变成1/sqrt(|cosx|^2+|siny|^2),震荡的关键是要出现1/0.
我使用的r,g,b的基本构造是t*sin[(sqrt(xn^2+yn^2)/sqrt(x^2+y^2))].
在这个基本构造的基础上发展成三角级数部分和上色,我本意是使用Fourier 级数,但是使用上三角级数才真的可行。使用三角级数就是为了放大数据,因为三角级数图形类似于声波。基本的上色相当于绘制一幅立体的俯视图。(z轴退化为一个点)。上面的图片如果进行局部放大,其精细的结够依然在。
所有的这一切都是代数法的结果。为什么要震荡?因为同一个等势线上sqrt(xn^2+yn^2)=不变,上色就没有渐变,正是引入了震荡因子导致了不变的势的变化,从而产生渐变,最后出现有立体感的管状体。

震荡描述分形的外部.gsp (129.8 KB)







选择参数,把级数h(x)的图形拉到基本垂直于x轴,其值就基本在0,1间跳动,从而产生黑白图。
调整参数可以变成彩图。这里y的运动速度是0.2,扫描线数是1000.其实作为练习没必要去这么高的参数。如果把亮度取的更大,就可以进一步的约去细节,得到边界图。着色只要大胆的用各种距离函数去上色就会得到结果。这里的距离主要是是只初象距离,边界距离(边界的范围可以自己认为指定)和象距离(Julia集合中函数|f^n(z)|的势),非分形中,一般的的轨迹上色就是函数|f(z)|的势。
这个图没有加入震荡,所以J集合的外部是平凡的,因为等势。

Julia 三角级数上色.gsp (129.54 KB)

13# xiaongxp
你说的这点,很对,同一个等势线上的势不变,用它上色就会再分形的外部同一个环的颜色完全一样,没有渐变。所以我就想了其它的办法让它渐变。
15# xiaongxp
我只观察到代数法算出的像距离dist=sqrt(xn^2+yn^2)=常量(就是说点z,在每一个环内运动时,dist不变,而且这点从反函数法上很容易想通。对dist的周期性变化,可以观察到,但是没从理论上想好,因为我做全屏时是把逃逸区域外的点变换到原点开始新的迭代,因此代数法要证明dist的周期性的关键就是要使说明以c1,c2为初值迭代,这种情况下dist的周期性,尽管,从zn的轨道上我观察到了周期性,但这不能代表普遍性。所以这个周期性的变化,我还没得在理论上想明白。),另外,我不想重新引入et,我就是想尝试不用et,能不能用其它的办法解决J集合的内部和外部的对接问题。思路有了一些,也许能行。因为如果我再引入et,就会增加迭代量。如果我回避et就减少了迭代量。
震荡这个分形从我发现到现在,我已经完整的掌握了J集合外部的等势圈生成环的方法了,用震荡可以使J集合外部平凡的等势圈变成渐渐过度。有时间我把我它些出来供分享。我用震荡控制J集合的外部,用距离控制J集合的内部。想在J集合外部加环(含圆盘),加入几个环,圆环,方形环,带型或其它形状,已经可以认为的控制操作了。震荡可以实现J集合内部和外部的过度。












这些图片说明了J集合就是边界那一点,内部不是J集合,所以内部和外部给了我们发挥的空间。也许你的J集合内部和我的J集合的内部不同,这太正常了,因为J集合的内部它不是J集合,每个人都可以按自己的想象去发挥它。就像J集合的外部不是J集合一样。
这些环是受数学方程控制的,所以控制了方程就可以控制环。这很数学化。环是震荡生成的,控制震荡域就控制了震荡的传播范围。震荡可以让震荡域变白。图片中白色的部分不是挖空的是白色。

实验文件.gsp (105.07 KB)

代数法去掉J集合第一个等势圈的方法:
0/sgn(sgn(2-sqrt(x^2+y^2)+1);
这里x,y是初值的坐标。逃逸半径为2.
去掉第二个等势圈的方法:
0/sgn(sgn(2-sqrt(x1^2+y1^2)+1);
这里x1,y1是迭代一次的坐标。
逃逸半径为2.
如果用就第二个同时去掉第 1,2两个等式圈。
设初值为x0,y0
第一次迭代的象为x1,y1.
计算距离dist1=sqrt(x1^2+y1^2)
计算终点象距离dist=sqrt(xn^2+yn^2)
再计算比值:dr=dist/dist1,这个比值是一个连续变量。而且dr≠0
而距离dist是一个跳跃的变量。用连续的变量dr着色可以让等势圈渐变。
方法如下:
R=r*|sin(π/T*dr)|;
G=g*|sin(π/T*dr)|;
B=b*|sin(π/T*dr)|.
r,g,b是三原色的混合比。调整比值就可以着不不同渐变颜色。T为周期,由于有绝对值,计算周期时不是2pai/T,而是π/T。
另:变量dist/sqrt(x^2+y^2)也是一个连续的变量,这个变量的分母可以是0,从而会产生震荡,生成各种特效环。
最后,如果不考虑J集合的外部着色,直接用dist着色就不错了。
如果要进一步的着色,使环变化更丰富,可以把用三角级数的前三项着色。震荡绘制J集合中在嵌套一个分形。
如果引入分段函数,可以控制震荡的范围在特定的园外。
方法是:
r=0.5(震荡半径)
dist0=r-sqrt(x)^2+y0^2)(震荡域,如果把这个方程修改,就可以够造出非圆环的环,这个方程控制了震荡的形状,可以叫震荡方程)
boolean0=sgn(sgn(dist0)+1)(判断震荡,园内值=1,园外值=0)
osc=dist*boolean0)+dist/dist0*(1-boolean0)
用osc(oscillation)带人上面的R,G,B着色就可以把震荡控制在半径为r的园外。
去环的方法的实例文件在21楼。
13# xiaongxp
我引入了et,但是用起来好像没特别的效果。而且我在代数法中引入的et和几何法中的不一样,
我看你们在几何法中的et迭代到一定的时候就不动了,但是我在代数法中引入的et,迭代时没上界。
因为在代数法中全屏迭代是这样的的:
点P,进行迭代,如果迭代象第一次超过半径为2的逃逸域,这个点就被相似变换x'=boolean*x,y'=boolean*y变换到原点(因为原点正好是这个相似变换的不动点,代数法中必须要找一个不动点作为变换的中心。当然可以选其他的不动点作为变换的中心),然后从原点开始迭代,这时(0,0)的象就是(c1,c2)(f=z^2+c,c=c1+c2*i).(c1,c2)开始迭代后,我发现其象几乎都没有在超过逃逸域了,这就导致计算出来的et不断的递增,几乎总是和迭代次数相等,这一点和几何法不同,这样et就失去了几何法中的那种特殊的功能。但同时也节省了大量的重复迭代,因此我猜测代数法的运算速度回超过几何法。我没验证过。只是分析。
代数法中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.整个探索的过程体现了特殊到一般的思想。探索比知道结果更有乐趣,玩几何画板我理解就是打麻将,都是玩。
返回列表