返回列表 回复 发帖
81# 榕坚
张老师可试试看,干了几天,思维已成定式,越弄越不带劲。
刚才重新再读一遍代码,好象明白了自己的做法与代码的差异。等空下来后再来试试。几何画板有一点很麻烦:更改。设计不到位的话没办法更改,只能重做(迭代中的次数、迭代点等一但发现有错的话不能更改只能删掉重做迭代)。
UF中的另一问题,也困扰着我好几天了,我将UF中的代码及效果图帖于此,再将我作的图帖于此,两相比较会发现,图有差别,但找不到原因何在,大家帮忙找找看。
该分形位于rab.ufm中的Cayley-mand。代码如下:
Cayley-mand {
; Ron Barnett, February 1999
; based upon the formula z = z^3 - az - c + 1
; convergence methods added 10/2/2004
init:
  complex fz = 0
  complex fzp = 0
  complex fzp2 = 0  
  #z = 0
  complex oldz = 0
  complex a = #pixel
  float iterate = 0
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 == 1                      ; Householder
    #z = #z - fz/fzp*(1 + fz*fzp2/(2*fzp^2))   
  elseif @converge == 2                      ; Halley
    #z = #z - 2*fz*fzp/(2*fzp^2 - fz*fzp2)  
  elseif @converge == 3                      ; Schroder
    #z = #z - fz*fzp/(fzp^2 - fz*fzp2)  
  elseif @converge == 4                      ; Ho custom
    #z = #z - fz/fzp*(1 + fz*fzp2/(@custom*fzp^2))      
  elseif @converge == 5                      ; Ha custom
    #z = #z - 2*fz*fzp/(@custom*fzp^2 - fz*fzp2)  
  elseif @converge == 6                      ; H_S custom
    #z = #z - @custom*fz*fzp/(@custom*fzp^2 - fz*fzp2)      
  elseif @converge == 7                      ; Mixed1
    if  iterate % 2 == 0
      #z = #z - fz/fzp*(1 + fz*fzp2/(2*fzp^2))  
    else
      #z = #z - fz/fzp
    endif  
  elseif @converge == 8                      ; Mixed2
    if  iterate % 2 == 0
      #z = #z - 2*fz*fzp/(2*fzp^2 - fz*fzp2)  
    else
      #z = #z - fz/fzp
    endif
  elseif @converge == 9                      ; Mixed3
    if  iterate % 2 == 0
      #z = #z - fz*fzp/(fzp^2 - fz*fzp2)  
    else
      #z = #z - fz/fzp
    endif
  elseif @converge == 10                      ; Mixed4
    if  iterate % 2 == 0
      #z = #z - @custom*fz*fzp/(@custom*fzp^2 - fz*fzp2)  
    else
      #z = #z - fz/fzp
    endif
  endif
bailout:
  |#z - oldz| >= @bailout
default:
  title = "Cayley Mandel"
  maxiter = 1000
  center = (0.3593516980975, 0)
  magn = 360
  method = multipass
  periodicity = 0
  heading
    caption = "Cayley Mandelbrot"
  endheading
$ifdef VER40
  heading
    text = "This is a 'convergent' fractal that uses multiple convergence \
            methods and has Mandelbrot-like regions for several convergence methods."
  endheading
$else
  heading
    caption = "This is a 'convergent' fractal"
  endheading
  heading
    caption = "that uses multiple convergence"
  endheading
  heading
    caption = "methods and has Mandelbrot-like regions"
  endheading
  heading
    caption = "for several convergence methods."
  endheading
$endif
  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 bailout
    caption = "Bailout value"
    default = 0.000001
  endparam
  heading
    caption = "Convergence Methods"
  endheading  
  param converge
    caption = "Convergence Method"
    default = 0
    enum = "Newton" "Householder" "Halley" "Schroder" "Ho Custom" \
           "Ha Custom" "H_S Custom" "Mixed1" "Mixed2" "Mixed3" "Mixed4"
  endparam  
  float param custom
    caption = "H_S Constant"
    default = 1.5
    visible = @converge==4 || @converge==5  || @converge==6 || @converge==10
  endparam  
switch:
  type = "Cayley-jul"
  bailout = @bailout
  converge = @converge
  p1 = #pixel
  custom = @custom
}
当开关项为Newton时,我作的图是:
未命名1.JPG
而UF中的图是:
Fractal2.jpg
看起来还一致。
而当开关项是Householder时,UF中效果:
Fractal5.jpg
而我作的图是:
未命名2.JPG
比较可发现,UF中最中间最小的等势圈为圆,而我的最中间是半月形,链条也有差异。而迭代次数两者都是一样的,这一差异不打紧,当作后面的开关项Mixed1,是这两种分形的揉合,差异就更大了,UF中的M集有小乌龟,而我的呢,没有乌龟,且链条差异大,UF中的图形美不胜收。
Mixed1开关项中的IF语句后的iterate % 2,是指:iterate -trunc(iterate /2)*2.
85# 柳烟


花了一个下午,验证结果没有问题。你上面的结果也应该是没错的,可能是着色的原因吧。我之前做过一个newton为独立开关项的,这次把所有开关整在一个文件中,几何画板地运行起来慢地象蜗牛似的。

捕获.JPG (19.67 KB)

捕获.JPG

看来明天又要重做了,把10个开关项整在一起,扫一张迭代次数为700的图形比我早晨扫普通M集迭代10000次还难哪。图形倒确实是非常漂亮的,可是已经扫了1个小时多了,哎:

捕获.JPG (27.67 KB)

捕获.JPG

今天做这个开关项才知道几何画板的计算器中输入的算式长度也受到限制,与excel中if语句的嵌套个数受到限制有点象。
86# 榕坚
榕兄在作图时,对程序中的 fz = #z^3 - a*z - a + 1里的第二项中的z是不是当作第一项中的#Z来处理的呢,我把这两个均看作#z进行处理。等势圈成半月形有问题,我把那个源文件帖在此,榕兄帮忙看看。谢谢。
未命名.JPG
问题.gsp (27.86 KB)
问题找到了,将面板上的逃逃半径0.000001再在小数点后,再加一个0,即由原来的10^-6改为10^-7,结果正常了。如果再设得更小更小一些,则半月形缩为一个点了。
未命名.JPG
每解决一个问题,又可朝前飞跃一步了,学习复分形,路上充满荆刺,也有鲜花,但荆刺毕竟多。
终于成功了,还差调色:

捕获568.JPG (45.45 KB)

捕获568.JPG

Tah-StutterBrot.gsp (13.14 KB)

返回列表