返回列表 回复 发帖
用震荡描述分形的外部,用距离函数描述分形的内部
下列图片和上面的的图片都是基于同样的一个模型: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)

12# myzam
我还是没理解赵老师的震荡。但如果着色只是关联距离em的话,那么et环带(即等势环带)的颜色会因循环出现而单调,因为距离em的值在不同的et环带上是周期出现的。用et值的增加,可以实现色彩由分形外部向边界的平滑过渡或增加相邻et环带的色差实现夸张着色效果。et作为一个基本而重要的逃逸参数,建议引入之。
13# xiaongxp
你说的这点,很对,同一个等势线上的势不变,用它上色就会再分形的外部同一个环的颜色完全一样,没有渐变。所以我就想了其它的办法让它渐变。
14# myzam
等势环带是由无数条等势线连续分布而成,同一等势环带有相同的et值,所以等势环带也称et 环带,它就是逃逸时间算法分形图中的那些带状环。等势线的势em在等势环带内是单调的,在不同的等势环带间又是周期出现的。
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就失去了几何法中的那种特殊的功能。但同时也节省了大量的重复迭代,因此我猜测代数法的运算速度回超过几何法。我没验证过。只是分析。
   逃逸时间算法,就是对像素点用其迭代路径的终止时刻et和位置量em定义颜色的计算机绘图方法,而终止条件就是何时逸出阈。如果只用x'=boolean*x,y'=boolean*y参与迭代,终止迭代的时刻只能是最大迭代次数。这种方法固然解决了满屏扫描,但不是逃逸法。逃逸时间算法是计算机图形学的基于迭代的作图方法,分形学只是借用之。如果不引入逃逸时间,按赵老师文件中的设计方法,我想每一条环带的色彩将会是简单的重复,因为你设计的迭代路径可以理解为几乎均以原点为起点。
      可能你只研究了我们早期的源文件,那都是几何法作的。现在我们基本放弃了这种方法,改而用代数法了,建议看看最近一二年的源文件。
      另外,赵老师的扫描线不用线段而用参数作颜色变换不知有何好处?这种作法必然使像素点跟着扫描线移动,从而使大量数据运算处于前台,而我们的像素点是静止的,像素点参与的运算是后台的,扫描速度会快一些。
返回列表