返回列表 回复 发帖

二。实战篇

8.画板中的双点迭代
双点迭代就是从2个初始点开始迭代,但是这两个初始点不能同时迭代,否则画板不堪负重。
我们应该采用分次迭代,迭代完成后采用取代的办法,这样就可以把那些不需要的点抛掉,尽可能的
让不需要的迭代的点不去参加迭代。我前面做了个显示各种J集合的工具,我体会到当迭代的点的总数
到达万级时,速度就很吃力了。所以双点迭代的关键是让不需要迭代的点不要迭代。做法如下:
设f(z)=z^2+c,c=c1+c2*i,迭代的初始点为z ,z‘,
A---以z=x+yi为初始点迭代:
第一步:在坐标平面内描点A(x,y)
第二步,从z开始迭代,迭代次数为n:z,z1,z2,,...,zn.
记迭代终点zn的为An(xn,yn)。
其中对应规则为 x→x^2-y^2+c1,y→2xy+c2
B---以z’=x'+y'*i为初始点迭代,迭代次数为m:
第一步:在坐标平面内描点A'(x',y')
第二步,从z'开始迭代,:z',z1',z2',,...,zm'.
其中对应规则为:x‘→x’^2-y‘^2+c1,y’→2x‘y’+c2。
记迭代终点为An‘(xn’,yn‘)。
这是两次独立的迭代,所以不会有不该迭代的点参加迭代。
接下来就是要进行取代,
我们要求z和z’充分接近,故引入一个参数h=h1+h2*i,|h|为无穷小量。
令z‘=z+h,则x’=x+h1,y‘=y+h2.、
所以,我们在第二次跌代完成后,把x’,y‘按上面的式子取代就可以了。m也可以用n取代。
但是我觉得留下m参数观察n,m取不同的的着色效果是不错的选择。如n-m≠0时会得到另类的J集合图象。
h参数控制了J集合的相邻的两个等势圈的交界线的粗细。如h=0.1,0.01,0.001.0.0001会得到精度
不同的图形。
最后是用势差上色。
记变量dr=|Δz[n+1]|=|z[n+1]'-z[n+1]|≈2|zn|*|Δzn|,其中
2|zn|=2sqrt(xn^2+yn^2);
|Δzn|=sqrt((x'n-xn)^2+(yn'-yn)^2).
记R=r*|sin(π*dr/T)|,G=g*|sin(π*dr/T)|,B=b*|sin(π*dr/T)|.
r:g:b控制色相(就是红的,还是粉色的意思)。
用R,G,B对点A上色,得点A",构建x对点A"的轨迹,选中轨迹按下ctrl+T,就会追踪这个轨迹。
最后运动参数Y,就会扫描出J集合的等势线CT(contour line)。
说明:ct线的粗细由两个因素控制 ,这从理论部分不难看出
1.h参数。2。初象z和z’的接近度,它们的接近度等价于zn和zn‘的接近度(一致连续的原因)
,这又归结到迭代次数n和m的接近度。
3.n-m≠0时,|zn-zm|会出现明显的差距,J集合的图形很另类。或者说将得到一张粗放形的等势线逼近J集合的图。
高亮只是单点迭代,算法与这里类似,ct线要用双点迭代。ct线要求内存比较高。迭代次数不必取的过高,因为,迭代到一定的次数点就稳定了,在迭代下去没多大的意义,只会耗内存。迭代到一定的次数稳定后,就zn的点的轨道可以看到极限圈,差不多就算稳定了。这时减慢扫描速度,提高扫描线数是可取的方法。
简单的总结:J集合进行双点迭代时,势与势差的关系为Δz[n+1]/Δz[n]≈f"(zn)=2|zn|,
势差(PD)是一个非常有用的量,利用同一个点列的前后项的PD差,可以创建月球表面的那种J集合图,利用同一个点列的PD之比可以创建另一种风格的J集合图。作J集合离不开距离,对距离的变形使用是上色的关键。势差~近似,就是这篇文章的关键词。
------这个方法叫势差法(potential deference--PD method)是比较合理的-------------完END.
  补充说明:今天早上起来,感觉理论上还得补充一点点才完备:
||zn|-|z'n||这才是势差,为什么把|zn-zn‘|当势差呢?因为:
||zn|-|z'n||≤|zn-zn‘|→0(|z-z’|→0).
这说明|zn-zn‘|是准确的势差||zn|-|z'n||的很好的近似。






这个文件完整的包括了代数法的基本构架。双点迭代用7b-fractal tool包中的工具Julia set'重复使用两次就可以构建这种迭代。

PD法(势差法)范例.gsp (13.37 KB)

把双点迭代改成单点迭代,放大局部后。。。
关于Δz[n+1]/Δz[n]的一个命题证明:
设f(z)=z^α+c,,z,z'为任意两复数,对z迭代:z,z1=f(z),z2=f(z1)=f^2(z),...,
zn=f(z[n-1])=f^n(z),对z‘作类似的迭代,规定Δz[n]= Δzn’-Δzn,
则Δz[n+1]/Δz[n]=(f(zn')-f(zn))/(zn'-zn)=f'(zn+t*Δzn)(0≤t≤1),
设f‘(z)的不动点为u,即α*z^(α-1)=z的根为u,如果点列{zn}收敛,则n→∞时,
f'(zn+t*Δzn)→f'(u).从而有:
n→∞时,Δz[n+1]/Δz[n]→f’(u)。
特别的:||zn‘|-|zn||为势差,而:||zn‘|-|zn||≤|zn’-zn|→0(|z-z‘|→0),
所以|Δzn|=|zn’-zn|可以作为势差(PD)的估计。
另f=z^2+c时,f’的不动点u=0,此时Δz[n+1]/Δz[n]=z[n+1]/z[n]→f’(u)=0(n→∞)。
从而|Δz[n+1]/Δz[n]|→0(n→∞),这说明当迭代次数充分大后,Δz[n+1]/Δz[n]比是压缩的。
因此可以直接用这个比值上色。
Δz[n+1]/Δz[n]这个比值也可以这么写:
Δz[n+1]/Δz[n]={z[n+1]'-z[n+1]}/{z[n]'-z[n]}
={f(z[n]')-f(z[n])}/{f(z[n-1]')-f(z[n-1])}
有的学者把这个叫距离之比DR. 这里的数列不是普通的数列,它们是函数列。
其实根本就是势差分析,做势差分析是可以用Taylor展示,展到前三项,这样接近度更好
,还可以用三角级数(做为F级数的替代品)展开势差

我使用的调色版~~类中类的架构

一。调色板构建
1.r,g,b的混合比确定色相,如r:g:b=1:0:0=红色,r:g:b=1:1:0=绿色等等。
2.再引入一个参数F,这rF,gF,bF的比值还是等于r:g:b,当引入F后,就可以改变同种颜色的明度。
比如r:g:h=1:1:0=绿,由于F的引入,就可以改变绿色的明度。随着F的值的变化,颜色始终在绿色系列里面变化。
这个F=|φ(zn)|。
3.如果令rF1,gF2,bF3去对应R,G,B,由于这是F1,F2,F3是三个不同的参数,此时r:g:b就确定不了色相了。此时难有规律可言,靠运气上色了。
4.确定参数F的取法,是值得关心的问题。
F常常可以取dist=sqrt(xn^2+yn^2),sin(dist),arctan(yn/xn),|zn|*|Δzn|(这个量叫PD),
arctan(yn-y[n+1])/(xn-x[n+1]),由于颜色面板的色宽设置成了【0,1】,所以上面那些值通常都要去绝对值。如果作图的人保密,看的人是难以猜出别人是怎么上色的。
5.令Δz[n]=z[n+1]-z[n]与势差相关,z[n]有势相关,它们的模和幅角都可以做为上色的参数,这就是上面的两个正切的来源。
  在同一个色相里面变化颜色,颜色的调子是比较统一的,但是有缺点就是显得比较单一,这并不是坏事。
6。对F的构建还可以这样
  上面的上色方式,可以统一的用公式表示为X=t*F(Zn)。X对应标准色带一个位置,还可以像这样构建F:F+α(Zn)就是给F加上一个小小的修正值。
  R=r*(F(Zn)+α(Zn))
   G=g*(F(Zn)+α(Zn))
    B=b*(F(Zn)+α(Zn))
参数α(Zn)∈[0,1],α只要有点点细微的变化就可以实现跨越色相,实现一种眼花缭乱的颜色变化。跨越色相要有个度,色相多了就是乱。α可以取成周期函数,这样跨越色相就是周期性的过程了。从而达到了控制色相总量的目的,色相少了单调,多了就是乱,周期函数刚好可以解决这个度的问题。这就是为什么要用对平移因子通常使用周期函数的原因所在。构建F还可以引入trunc函数,把色的明度分成几大类,就象这样:设dist=sqrt(x^2+y2),如果把色的明度设置成10个等级,就可以这样算trucn{[dist/10-trucn(dist/10)]*10}(这个算式与画板你设置的精度有关,要做相应的修改)。下面的彩图就是这么做出来的,实验上色的明度等级不能太多,多了效果也显示不出来。另外,上色还得要注意值域是否超过主值区间,因为进入常色区间后色彩就没变化了。不注意这点就会发现实验结果和这里所说有的内容不吻合。
二。调色板的构建有很多,但是万变不离其中,要么在同一个色相里面变化颜色,要么就是从一个色相跨越到另一个色相。构建调色板,必须坚持原则:拒绝运气色!原因很简单,如果你构建的调色板是靠的运气色上色,这样的调色板你根本就没法控制它,最终导致调色困难重重,或根本就无法调试色彩。
三。关于HSV的调色板
   色彩学有公式实现:rgb颜色与hsv颜色参数的转换,这就是说只要构建了RGB的调色板,这个调色板同样可以用来完成HSV的上色。既然RGB和HSV的参数色彩学上有公式联系他们,这就是说这两种上色可以认为并无本质的差别,只是RGB更电脑化一点,HSV更接近于生活一点。
四。我就是这样使用调色板的,我不知道别人是怎么使用调色板的。
五。我特别希望玩分形的人多说点自己的看法,错了不要紧,反正都是玩,错了改过来就行了。我就是这么想的,如果我发现我今天写错了,改天我就会订正。科学的东西就是这样在不断的订正错误中前进。没有错误和失败,永远都不会有创造。分形从认真专研到现在半过多月了,我感到分形的关键是算法。
到目前为此:代数法的逃逸时间esct还只是用来挖环,我还没发现esct的特别的用法。也许时候未到。
六。简单的小结
  说了这么多,我的调色板可以用一个公式总结成:X=a*(F+b),其中因子a*F控制同一个色相内的变化,平移因子a*b控制跨越色相的变化,b的控制是比较难的。我理解我的上色方法是r,g,b之比确定类(色相),而F确定同类中的各种颜色(同类中的各种颜色可以用trunc函数划分等级生成跳跃上色)。一句话:类中类的架构。
我只给出了我的方法,没有给出具体的算式,因为分形这个场景会给人无限的想象和发挥的空间,用创建调色板的原则去创建自己的调色板,那才好玩,分形才会显得个性张扬,多姿多彩。
  
  

注:上面的彩图是单参数上色。

震荡域控制演示




付:着色公式的构架为a*F,这种思路来自于逃逸算法的逃逸域。震荡控制技术是通过控制扫描点的轨迹来控制色彩的。中间的布尔运算是关键:boolean=sgn(sgn(a)+1),其次三角函数的周期不能太大,太大了震荡不起来。
可以把震荡嵌入到其它分形中,也可以把控制震荡的技术抽取出来单独控制其它分形。



震荡域1.gsp (7.48 KB)

震荡域2.gsp (7.67 KB)

震荡域3.gsp (7.67 KB)

震荡域4.gsp (8.67 KB)

借用控制震荡域的方法,选择性显示J集合的图形.gsp (36.58 KB)

震荡域叠加模拟3D~~域叠加法引入光照因子





上图未加入震荡因子,光照是比较均匀的。

上图在三个域内各加了一个震荡因子,和上一图比照光照就比较明显集中。
这么看来利用震荡域,模拟光照,可以创建立体图形。只是应该把震荡中心放在域外,如果把震荡中心放大域中,就会出现震荡洞。上面的最后两图,设置了3个域。域的中心是第一幅图的那三个位于极限圈的亮绿色的点。在下面的文件里面可以看到。
1.具体做法是:先分别进行单参数上色对R,G,B分别上色,调式好后删除
2.叠加它们 即有,DR=R+G+B,接着进行三参数R,G,B上色,稍调试就得上面的图。
重新令R=r*DR,G=g*DR,B=b*DR,我的调色板,我都写在上楼的,按上楼的调色板做就可以出来。
3.调试好后分别对单参数R,G,B加入震荡因子,这样就可以创建有光照的3D图形。
4.如果不进行域叠加,直接用R,G,B上色,颜色的种类到是多,得到的是另一种有立体感的图。
5.中间用到了逻辑变量。黑色是逻辑变量控制的结果,我还是没有找到逃逸时间esct的用武之地。时候也许还未到。震荡中心总是可以取到域外的,而且震荡中心的位置可以认为的定,它就是光源的中心。
每个域的半径用点来控制,以便调试半径的大小。域的中心选在极限圈上效果最好,因为J集合要显示的是收敛点的图,如果中心不再极限圈上,就会出现嘿嘿的一遍。震荡的用处还马虎,可以用。
另外还可以进一步设置光照半径。

三域叠加.gsp (14.9 KB)

域(Area)叠加技术阐述:

从控制震荡域的范围,强度中提取的方法,该法与分形无关,是对扫描轨迹上色的一种方法。
下面的文件就不是分形,是用来演示域(area)叠加技术的原理文件。图片是详细做法。
T1:

T2:

除不除r1都可以,通常在应用时都要对area1乘个系数修正它,所以除以r1并不是关键。
图中心的亮蓝色的点a是认为添加的,不是轨迹的色图。
T3:

T4:

T5:

T6:

注:关键词~域,域半径,域中心,光照因子,光照中心,光照半径,逻辑变量。背景总是对应着色参数的0值,所以R,G,B单参数上色时背景为红色,三参数上色时背景就是黑色的,通过平移参数可以改变背景,也可以通过无穷大消除背景。轨道方程:sqrt[(x-xa)^2+(y-ya)^2]=v叫轨道方程,它决定色的走势。改为椭圆sqrt[2(x-xa)^2+(y-ya)^2]色的走势就是椭圆,该为角表出
arctan{[y-ya]/[x-xa]}色的走势就是以点(xa,ya)为中心的线性走势,该为sqrt[(x-xa)^2+(y-ya)]色的走势就是抛物线走势,所以把这个方程叫轨道方程。轨道方程同时解决了扫描法绘制函数图象的问题。用角度做为变量可以形成线性光照因子。

演示域叠加技术的文件.gsp (8.84 KB)

线性走势.gsp (6.95 KB)

线性走势1.gsp (6.98 KB)

线性走势2.gsp (7.38 KB)

双曲走势.gsp (7.75 KB)

二域叠加之遮罩(裁剪)


注:遮罩就是罩住的内容显示,没罩住的内容就不显示。特别注意,第二个域的中心设置成
a,b更好,这样:r-sqrt[(x-a)^2+(y-b)^2].这是第二个域动,遮罩不动,也可以设置成遮罩动,
域不动来显示内容。
http://www.fractaldomains.com/2011/08/colorfulness-1/

遮罩原理说明文件.gsp (8.97 KB)

画颜色球.gsp (10.27 KB)

高亮技术HL:

下图是HL技术和域(Area,2个域)叠加技术结合生成的图形
域直接屏蔽了等势线。高亮(high light~HL)会有光泽的效果。
域的中心必须选择在极限圈上,否则就是黑黑的一遍。
高亮原理:{zn}这个序列在n充分大后,假设收敛(事实上我们平时绘制的就是J集合收敛点的图,尽管J集合的点不都是由收敛的点组成,但是收敛点的图是J集合的最好的近似,我们只能绘制J集合的近似图),那么对充分大的n(迭代次数)来讲,zn和z[n+1]会充分接近,
故差zn-z[n+1]会很小,此时zn的前后项,要么位于同一个等势线上,要么跨在不同的等势线上,因此zn-z[n+1]的模要么
是o,要么非0,根据解析函数的最大模原理,必在边界上取到最大模,所以边界会高亮。
由无穷小分析知道z[n+2]-z[n+1]≈f'(zn){z[n+1]-z[n]}=2zn*{z[n+1]-z[n]}.
用这种方式上色,迭代次数n必须充分大(实际上较大就可以了),对于小n值是不能体现其特色的。
由于我的上色公式是:R=r*F,G=g*F,B=b*F,色相由r:g:b决定,所以上色是可控上色.



高亮技术演示.gsp (16.44 KB)

高亮技术演示2.gsp (19.16 KB)

先掌握点基本的分形图形学的技术,在此基础上再探究。
3.jpg
返回列表