Board logo

标题: 牛顿分形的“光滑”着色 [打印本页]

作者: changxde    时间: 2012-7-27 11:40     标题: 牛顿分形的“光滑”着色

所谓Newton分形,就是在复平面上给定复函数g(z),构造Newton迭代公式 f(z)=z-g(z)/g'(z),对复平面内的每一点z0,用Newton迭代公式 z_(n+1) = f(z_n)进行迭代计算,得一迭代序列,z0,z1,z2,z3,……(1),根据这序列的不同表现,选定一个颜色值给z0以标记,在复平面内就形成了一个漂亮的图案就是Newton分形。典型的有 g(z)=z^3-1.
N1207260.JPG
N120726.JPG
N120726'.jpg

图片附件: N1207260.JPG (2012-7-27 23:03, 14.6 KB) / 下载次数 1927
http://www.inrm3d.cn/attachment.php?aid=18085&k=1869672b699d8cddceac0c725bf288b1&t=1716279826&sid=IVAP1i



图片附件: N120726.JPG (2012-7-27 23:03, 27.76 KB) / 下载次数 1902
http://www.inrm3d.cn/attachment.php?aid=18086&k=8bac9c012503514729c2f28b85d9dc22&t=1716279826&sid=IVAP1i



图片附件: N120726'.jpg (2012-7-27 23:03, 29.75 KB) / 下载次数 1902
http://www.inrm3d.cn/attachment.php?aid=18087&k=7a142da9cdd7332d228c41ee44b321d0&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-7-27 11:44

对于Newton迭代序列,z0,z1,z2,z3,……(1),一般可以很快收敛于g(z)的一个零点,但一般情况下g(z)有多个零点,而且我们不能准确写出g(z)的零点值。为此我们作变换dn=zn-z_(n-1),构造新序列:d1,d2,d3,……(2),它可以很快收敛于0。可以想象,由于z0在平面内的不同位置,它们分属于g(z)的不同零点的领域,即使在同一零点领域,也有离零点远近之分,为此,再引入一个小正数 ε>0,对于z0,若存在一个正整数 N,当 n>=N 时,||dn||<ε,而 n<N 时,||dn||>ε ,这时对于z0,产生几个可用来给z0标记颜色的特殊值,N,zN,dN。N——逃逸时间,zN——迭代终点——应该很接近零点,dN——最后一次迭代的步长。当然,由于时间和技术问题,我们应该设定一个最大迭代次数 M ,对一般的点z0 的 N < M,可是有一些点z0,迭代 M 次后仍有 ||dM||>ε,这些点就是零点领域边界附近的点,画在图上就是Newton分形的分形链上的点。
作者: 柳烟    时间: 2012-7-27 20:33

好象N集光滑作色,不是完全抹平等势圈,如果完全抹平后,每块缺乏立体感,成平面状,边界看起来也不太美。
未命名.JPG
这是UF中的效果,各块看起来光滑,仔细一瞧,仍有等势圈,只不过等势圈十分摸糊,晃眼一看,很是光滑。不知能否象圆陷阱那样,使每块成为 伪3D.

图片附件: 未命名.JPG (2012-7-27 20:33, 59.36 KB) / 下载次数 2358
http://www.inrm3d.cn/attachment.php?aid=18092&k=766c51d8d56f6f958213a226cd2dbd4d&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-7-27 21:53

3# 柳烟

是那一个效果,我怎么没找到
作者: changxde    时间: 2012-7-27 21:56

2# changxde

关于迭代序列的收敛问题,要用到数学理论,我已经淡忘了,网友可以补上。
作者: changxde    时间: 2012-7-27 22:13

为了淡化等势线,我们考虑 ||dN||/ε 这个值,它的值域是(0,1],把它与逃逸时间结合起来,即可淡化等势线。
不过因缺乏迭代序列的收敛理论,||dN||/ε 这个值的变化规律还不太清楚,但可以肯定它不是线性的。望网友们一块探讨。
N120727.JPG

图片附件: N120727.JPG (2012-7-27 23:00, 24.43 KB) / 下载次数 1897
http://www.inrm3d.cn/attachment.php?aid=18096&k=13531b3757e7b29b2e85a247aef65f8b&t=1716279826&sid=IVAP1i


作者: 柳烟    时间: 2012-7-27 23:35

4# changxde
在ahm.ucl中,里面只有一个特效文件。打开任一牛集,再点选outside选项卡,找到ahm.ucl中的文件Extrapolated Bailout,打开后,再在面板中选中四个开关项的newton,即得此图形。代码可单独将此开关项抽出来。这个效果我干了几次,整不出这效果,可能我的造法有问题,代码有些地方费解。
作者: 柳烟    时间: 2012-7-28 07:46

我将那个特效文件,进行大幅度缩水,仅保留newton开关项部分,并动了手脚后,代码及图形效果如下:
VaryingBailout {

final:
complex x = #pixel
If Imag(#pixel)==0
  x=#pixel + 1e-30i
Endif

int iter = 0
repeat

   xold=x
   x=x -( x^3-1)/(3*x^2)

  iter=iter+1
until (|x-xold|<=@SmallBailout )

  float bailTest=|x-xold|
  Power=2
If iter!=1000
    #index=cabs(sqrt(log(Power)*(#maxiter-iter) + log(log(bailTest))))
Else
   #index=sqrt(log(log(bailTest)))
Endif
default:
title="Extrapolated Bailout"

float param SmallBailout
  caption="Small Bailout"
  hint="Should be positive. Smaller values mean more time, but more accurate \
  pictures (assuming you increase the iterations)."

  default=0.0001
endparam

}
Fractal2.png

图片附件: Fractal2.png (2012-7-28 07:48, 196.95 KB) / 下载次数 2100
http://www.inrm3d.cn/attachment.php?aid=18099&k=0c21e77fbb1c573bdd61fcc6e359bc8e&t=1716279826&sid=IVAP1i


作者: 榕坚    时间: 2012-7-28 09:15

只能弄到这个程度,要兼顾到多种颜色的一致性很难:

图片附件: N.JPG (2012-7-28 09:15, 69.54 KB) / 下载次数 2127
http://www.inrm3d.cn/attachment.php?aid=18101&k=f713148c0503f6716e2c4607698f6e97&t=1716279826&sid=IVAP1i


作者: 柳烟    时间: 2012-7-28 18:24

我今天试着模糊等势圈,用常老师法,我不得法,结果等势圈越整越浓,用|z-z0|的终象除任意小正数ε(阈值)与et搭配,我是分二个阵营,一是||dM||>ε,二是||dM||<ε分别调色。如何搭配才得当?
我试着翻译8楼光滑N集的代码,结果#index=cabs(sqrt(log(Power)*(#maxiter-iter) + log(log(bailTest))))不好驾驭,弄出无意义。又until (|x-xold|<=@SmallBailout )是啥意思?与后文如何串联?丈二和尚摸不着头脑。再精简代码如下,我在UF中验证了,得到的图形完全一样。个别句子再动手脚。
VaryingBailout {

final:
complex x = #pixel


int iter = 0
repeat

   xold=x
   x=x -( x^3-1)/(3*x^2)

  iter=iter+1
until (|x-xold|<=@SmallBailout )

  float bailTest=|x-xold|
  Power=2
If iter-#maxiter<0
    #index=cabs(sqrt(log(Power)*(#maxiter-iter) + log(abs(log(bailTest)))))
Else
   #index=sqrt(log(abs(log(bailTest))) )
Endif
default:
title="Extrapolated Bailout"

float param SmallBailout
  caption="Small Bailout"
  hint="Should be positive. Smaller values mean more time, but more accurate \
  pictures (assuming you increase the iterations)."

  default=0.0001
endparam

}
短短的代码,怎么那么麻烦,怪得出奇。
作者: changxde    时间: 2012-7-28 19:03

淡化等势线的方法如下图:
000.JPG
如果 b 的变换在 ( 0 , 1 ] 上是均匀的,淡化效果最好。
那么如何使上面那个比 ||dN||/ε 在 ( 0 , 1 ] 上变化均匀呢?

图片附件: 000.JPG (2012-7-28 19:03, 29.64 KB) / 下载次数 1323
http://www.inrm3d.cn/attachment.php?aid=18113&k=52e8a3c0dfb7d6c94ad7a6c285ff545b&t=1716279826&sid=IVAP1i


作者: 榕坚    时间: 2012-7-28 21:43

10# 柳烟


麻雀虽小五脏俱全哪,要抹平那等势圈又能体现收敛程度真难。

图片附件: N (2).JPG (2012-7-28 21:43, 34.1 KB) / 下载次数 1298
http://www.inrm3d.cn/attachment.php?aid=18115&k=4ddb9e570bce2758788a0ed942c17096&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-7-30 18:18

10# 柳烟

这个颜色索引值有点怪,
If iter-#maxiter<0
    #index=cabs(sqrt(log(Power)*(#maxiter-iter) + log(abs(log(bailTest)))))
Else
   #index=sqrt(log(abs(log(bailTest))) )
Endif
为什么没用 @SmallBailout ???
翻译成我们常用的符号是
sqrt((N-et)*ln2+ln|ln|d||)
不过这个值比较大,调整一下
sqrt(((N-et)*ln2+ln|ln|d||)/N)
而这个值又比较集中与某一点,适当调整一下即可。
N0.JPG

图片附件: N0.JPG (2012-7-30 18:52, 90.5 KB) / 下载次数 1288
http://www.inrm3d.cn/attachment.php?aid=18154&k=c8cb869621bd5543bfb0e731ae28eed2&t=1716279826&sid=IVAP1i


作者: 柳烟    时间: 2012-7-30 20:25

13# changxde
漂亮!看了你这帖,我仅保留代码IF至endif中的第一个#index,将判断的其余部分删去,仍不影响效果。上午,我仍失败,看了这帖,很受启发,我再试试看。
作者: 榕坚    时间: 2012-7-30 20:36

13# changxde


repeat

   xold=x
   x=x -( x^3-1)/(3*x^2)

  iter=iter+1
until (|x-xold|<=@SmallBailout )
这是一个直到型的循环语句,|x-xold|<=@SmallBailout 是判断是否继续循环的条件。
作者: 柳烟    时间: 2012-7-30 20:57

15# 榕坚
如果将红色部分去除,在UF中可发现等势圈大显。
作者: 榕坚    时间: 2012-7-30 21:10

又抹平了一些:

图片附件: N.JPG (2012-7-30 21:10, 41.85 KB) / 下载次数 1319
http://www.inrm3d.cn/attachment.php?aid=18157&k=2330f1e999377a776931236f729590f3&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-7-30 21:12

它是循环终止的条件,不能去掉。
另外在N集主程序中好像没有记录|z-zold|。
疑问是在index中怎么没有SmallBailout的影子,这个值过大或过小都会对着色效果有影响。
作者: 榕坚    时间: 2012-7-30 21:30

好象与颜色有一定关系,还有下载到电脑后打开可能等势圈没那么明显:

图片附件: N (2).JPG (2012-7-30 21:30, 35.84 KB) / 下载次数 1311
http://www.inrm3d.cn/attachment.php?aid=18158&k=0dd7cc4f527e5f41e342b0956c6397e5&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-7-30 21:49

颜色值过度还是比较平滑的
N0.JPG

找了好久找到这个文件,可惜我也看不懂了。

图片附件: N0.JPG (2012-7-30 21:49, 10.25 KB) / 下载次数 1291
http://www.inrm3d.cn/attachment.php?aid=18159&k=b3b805f6dbbcb3028a00846b79da1934&t=1716279826&sid=IVAP1i



附件: 牛顿分形.gsp (2015-1-18 08:52, 87.42 KB) / 下载次数 1949
http://www.inrm3d.cn/attachment.php?aid=23502&k=58b6468483dccd80ee8e552e5e0a66c0&t=1716279826&sid=IVAP1i
作者: changxde    时间: 2012-7-31 11:13

学习向老师的多轴对称
N0.JPG
N0.JPG

图片附件: N0.JPG (2012-7-31 11:13, 54.24 KB) / 下载次数 2656
http://www.inrm3d.cn/attachment.php?aid=18163&k=e24e1939627232d1223fb5beb4874131&t=1716279826&sid=IVAP1i



图片附件: N0.JPG (2012-7-31 17:29, 88.59 KB) / 下载次数 2427
http://www.inrm3d.cn/attachment.php?aid=18164&k=31ae9cf08f009a19331ecd12e9f199c3&t=1716279826&sid=IVAP1i


作者: 柳烟    时间: 2012-7-31 17:53

请教一个问题x-xold|>=@SmallBailout 实际上就是用GSP造牛集时的p,而代码中的:|x-xold| 〈=@SmallBailout ,其实就相当于1-p,要造出牛集,缩放点z-f(z)/f'(z),用的是p,而非1-p,否则造不出链条。决定是否终止循环的应该是p,而非1-p,我没有考虑红色部分,造出的效果如下:
未命名.jpg
请问红色部分究竟在画板中,如何关联?

图片附件: 未命名.jpg (2012-7-31 17:53, 91.11 KB) / 下载次数 2637
http://www.inrm3d.cn/attachment.php?aid=18165&k=2714ea0be507875ff82950dcc24be168&t=1716279826&sid=IVAP1i


作者: xiaongxp    时间: 2012-7-31 18:38

21# changxde
非常不错的分形花边!第二图是四次方程N集的4折轴变换吗?中间再放一个常规尺寸的M集或J集就完美了。
作者: 榕坚    时间: 2012-7-31 19:53

22# 柳烟


其实关键是它的着色函数,即#index
作者: changxde    时间: 2012-7-31 20:04

22# 柳烟

它就是跳出循环的条件,和通常我们的作法是一致的。
作者: changxde    时间: 2012-7-31 20:07

23# xiaongxp

都是三次N集中的一段。

理论上嵌入一个M或J集是可以的,只是画板能不能承受。
作者: xiaongxp    时间: 2012-7-31 20:49

23# xiaongxp
都是三次N集中的一段。
changxde 发表于 2012-7-31 20:07
三次N集的两项链间成120°,为什么上图是直角呢?常老师用了什么变换?若是多轴对称变换,截取的那段折叠的?要不这个三次N集含有一、二次项,这个90°太难想象了。
作者: changxde    时间: 2012-7-31 21:45

27# xiaongxp

用八对称轴,截一小段即可。
N0.JPG

图片附件: N0.JPG (2012-7-31 22:10, 36.08 KB) / 下载次数 2389
http://www.inrm3d.cn/attachment.php?aid=18171&k=e06a644b6e7fb66b20d513ba324f4d0a&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-8-1 09:11

不知胡老师是如何淡化等势线的

作者: myzam    时间: 2012-8-1 17:30

21# changxde


向老师的花边做的真不赖。
作者: xiaongxp    时间: 2012-8-1 18:56

30# myzam
不,这是常老师作的,就是给我们带来了等势线作法和浮雕效果的常老师。
作者: changxde    时间: 2012-8-2 13:56

二位老师好,这里的成果都是版友们共同探讨的结果。
作者: changxde    时间: 2012-8-2 13:57

N0.JPG

图片附件: N0.JPG (2012-8-2 13:57, 73.23 KB) / 下载次数 2146
http://www.inrm3d.cn/attachment.php?aid=18197&k=d04608c580999c3bc62bda4ac7e329ca&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-8-2 17:28

M集对称
M1.JPG M2.JPG

图片附件: M1.JPG (2012-8-2 17:28, 62.97 KB) / 下载次数 2104
http://www.inrm3d.cn/attachment.php?aid=18206&k=026f3b14240e7922feac9da6562e3154&t=1716279826&sid=IVAP1i



图片附件: M2.JPG (2012-8-2 17:28, 50.94 KB) / 下载次数 2065
http://www.inrm3d.cn/attachment.php?aid=18207&k=6c0a57103ebbf5e14148cd3e4980a745&t=1716279826&sid=IVAP1i


作者: 柳烟    时间: 2012-8-2 23:25

按UF的光滑作色法,扫一M集:
未命名.jpg
按#index=sqrt(ln(2)*(n-et) + log(abs(|zn|)))),这里|zn|为模的迭代终值.我弄出后,扫出的M集的肚皮上,发现有部分白色溢出,采取了一些补洞措施,其中:迭代次数为n=100时,我用的是n+2-et,且在根号内加上了一个正整数.不知有无更好办法.这是在前面说的那个光滑代码中,找到的并进行了一些改造,以达填洞的目的.大家看看有无更好办法.

图片附件: 未命名.jpg (2012-8-2 23:25, 75.89 KB) / 下载次数 2312
http://www.inrm3d.cn/attachment.php?aid=18211&k=639000ff3f88d7b64dd963dce79094ad&t=1716279826&sid=IVAP1i


作者: changxde    时间: 2012-8-2 23:33

UF中M,J 集有代码
init:
  complex il = 1/log(@power)                ; Inverse log (power).
  float lp = log(log(@bailout))                ; log(log bailout).

final:
  #index = 0.05 * real(#numiter + il*lp - il*log(log(cabs(#z))))




欢迎光临 inRm3D: 画板论坛 (http://www.inrm3d.cn/) Powered by Discuz! 7.0.0