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) / 下载次数 1929
http://inrm3d.cn/attachment.php?aid=18085&k=7b708a7dd3f91e40113ec47edd24ceee&t=1716302296&sid=dzKkDy



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



图片附件: N120726'.jpg (2012-7-27 23:03, 29.75 KB) / 下载次数 1903
http://inrm3d.cn/attachment.php?aid=18087&k=31f13386f4ca27b93f0ce90d5d79eebf&t=1716302296&sid=dzKkDy


作者: 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://inrm3d.cn/attachment.php?aid=18092&k=4b53e83118dcbe74962022a0a9a28a5d&t=1716302296&sid=dzKkDy


作者: 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://inrm3d.cn/attachment.php?aid=18096&k=f700e8a2dbc39e20007ba71edec82906&t=1716302296&sid=dzKkDy


作者: 柳烟    时间: 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://inrm3d.cn/attachment.php?aid=18099&k=1a3b96b0b99ff25e536bc3d776cf4075&t=1716302296&sid=dzKkDy


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

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

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


作者: 柳烟    时间: 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://inrm3d.cn/attachment.php?aid=18113&k=c15010a2435505d1c6921f2f0ed88fb7&t=1716302296&sid=dzKkDy


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

10# 柳烟


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

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


作者: 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://inrm3d.cn/attachment.php?aid=18154&k=60b4cd6682768b9fe26d687af687a911&t=1716302296&sid=dzKkDy


作者: 柳烟    时间: 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://inrm3d.cn/attachment.php?aid=18157&k=b665a64f3907fc60c95f9edd86682609&t=1716302296&sid=dzKkDy


作者: 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://inrm3d.cn/attachment.php?aid=18158&k=a036545014b0a440517023ed23b45922&t=1716302296&sid=dzKkDy


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

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

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

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



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

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

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



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


作者: 柳烟    时间: 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) / 下载次数 2638
http://inrm3d.cn/attachment.php?aid=18165&k=5cb8f5bb855837b9467f45b41deade6f&t=1716302296&sid=dzKkDy


作者: 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) / 下载次数 2390
http://inrm3d.cn/attachment.php?aid=18171&k=b5d4ef5f56ebbc76af0712f4863ad479&t=1716302296&sid=dzKkDy


作者: 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://inrm3d.cn/attachment.php?aid=18197&k=4be8bd7b3e4ea5bd7e54bced5cba7dfe&t=1716302296&sid=dzKkDy


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

M集对称
M1.JPG M2.JPG

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



图片附件: M2.JPG (2012-8-2 17:28, 50.94 KB) / 下载次数 2067
http://inrm3d.cn/attachment.php?aid=18207&k=1ef17aefa2b6667f979cdc873f4255dc&t=1716302296&sid=dzKkDy


作者: 柳烟    时间: 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://inrm3d.cn/attachment.php?aid=18211&k=41f508330eb2167039e965a58bd28b90&t=1716302296&sid=dzKkDy


作者: 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://inrm3d.cn/) Powered by Discuz! 7.0.0