返回列表 回复 发帖
以0:Newton
4、Hocustom
7、Mixed1为例
于是程序可精简为这几段:
loop:
  iterate = iterate + 1
  oldz = #z
  fz = #z^3 - a*z - a + 1
  fzp = 3*#z^2 - a
  fzp2 = 6*#z
  if @converge == 0                          ; Newton
    #z = #z - fz/fzp
   
elseif @converge == 4                      ; Ho custom
    #z = #z - fz/fzp*(1 + fz*fzp2/(@custom*fzp^2))      
   
  elseif @converge == 7                      ; Mixed1
    if  iterate % 2 == 0
      #z = #z - fz/fzp*(1 + fz*fzp2/(2*fzp^2))  
    else
      #z = #z - fz/fzp
Cayley-mand(更新).gsp (39.53 KB)
庆幸才弄了三个开关项的分形,慢如蜗牛。如果全部弄完,真的扫死机子了。其余的几个分形,你只要将计算式新增添加进已有的式子,即可得新的分形,没必要重新迭代并着色,省事多了。
这是上楼的视频。
原来发的视频文件有点小小问题,现已更新。
http://u.115.com/file/f61729ea0d#
其余的几个开关项,作为练习,自已仿此完成。
扫图:
未命名.jpg
2011-2-4 16:08

未命名(1).jpg
2011-2-4 16:08
未命名.jpg
2011-2-5 09:04

未命名.jpg
2011-2-5 13:29
这个精彩。
范例位于reb.ufm系列中:
OldPhoenix {
; Ron Barnett, 1990
; Old formula from Stevens Turbo Pascal book
; Modified and tweaked March 2000
init:
  #z = flip(#pixel)
这是z的初值,画板采取的是先迭代,后定位亦即合并方法。最后将z定位于何处?flip函数是将点#pixel的实部与虚部相交换,即横坐坐标交换后的点。如果不交换行不行呢,行,则与原图比校,只是旋转了一个角度,旋转了多少,你可按中学里的点变换算处即知。最后是对#pixel点进行着色。)  
complex x1 = 0
complex y = 0
(这是x1与y点的初值,均为原点。)
loop:
  x1 = #z*#z + real(@p1) + imag(@p1)*y
  y = #z
  #z = x1
(这段代码意思是,将初值的象算出,即为x1 = #z*#z + real(@p1) + imag(@p1)*y
,然后将其赋值给z的象点 #z = x1,而将Z的原象赋给y(注意这里的x1就相当于画板里的z',而y的象点,在迭代过程中,相当于上一个z值。)我是这样理解的,不知对不对,大家可发表意见。)

bailout:
  (@test == 0 && |#z| <= @bailout) ||                                         \
  (@test == 1 && sqr(real(#z)) <= @bailout) ||                                \
  (@test == 2 && sqr(imag(#z)) <= @bailout) ||                                \
  (@test == 3 && (sqr(real(#z)) <= @bailout && sqr(imag(#z)) < @bailout)) ||  \
  (@test == 4 && (sqr(real(#z)) <= @bailout || sqr(imag(#z)) < @bailout)) ||  \
  (@test == 5 && (sqr(abs(real(#z)) + abs(imag(#z))) <= @bailout)) ||         \
  (@test == 6 && (sqr(real(#z) + imag(#z)) <= @bailout))
这里的开关项,面板上可看出,是test ,主要功能是改变画板里的逃逸参数p的算法。我以test==0,与test==1为例,其余你可举一而反三。
default:
  title = "OldPhoenix"
  center = (0.0, 0.0)
  maxiter = 256
  periodicity = 0
  param version
    caption = "Formula Version"
    default = 1.0
    hint = "You should never see this parameter; it's used internally to track \
        which version of the formula was used to create your image, so that \
        if a bug is found which breaks backwards-compatibility, the formula \
        can adapt transparently."
    visible = false
  endparam
  param test
    caption = "Bailout Test"
    default = 0
    enum = "mod" "real" "imag" "or" "and" "manh" "manr"
(这里的"mod" "real" "imag" "or" "and" "manh" "manr"即为代表前面的不同的test ,面板上可发现。)  
endparam
  param bailout
    caption = "Bailout value"
    default = 100.0
(阈值为100,这大家对前面的讲解熟了后,一看便知。)   
min = 1
  endparam
  param p1
    caption = "Parameter 1"
    default = (0.56667, -0.5)
(P1的值,面板上也有。)  
endparam
switch:
  type = "OldMandelPhoenix"
  bailout = @bailout
   
}
上面对代码粗略讲了讲,初学者可能一头雾水,不过,你接着看下楼即将发表的视频后,可加深对代码的了解。我去制作视频去了,干了这么久,制作视频很是一件麻烦的事。另外,在科学的大道上,没有平坦的大道可走,只有不畏劳苦沿着陡峭山路登攀的人,才能达到希望的顶点——-马克思。顺便写上这句名言,与各位板友共勉。
OldPhoenix.gsp (27.36 KB)
上面是制作视频文件中,搞出的画板原文件。这是制作的视频:
http://u.115.com/file/f6ed74bad7#
将就上面文件,扫几张图片:
未命名.jpg
2011-2-5 21:52
未命名(1).jpg
2011-2-5 21:53

未命名.jpg
2011-2-6 09:03
将此分形的6个改变逃逃参数计算法的test全部造在一个画板文件中,就象操作UF一样方便,是可行的。作为习作,大家可试试。
test6:
未命名(1).jpg
2011-2-6 09:05

试试向老师的工具箱中的夸张作色法,再弄一张。
未命名(2).jpg
2011-2-6 09:05


test4
未命名(3).jpg
2011-2-6 09:05
返回列表