返回列表 回复 发帖
73# 榕坚
n>501,则M集中有花样,如果n<501,则一定是M集,这从代码中能看出是这样。
这段代码,可能我在理解时有误,结果造出的图与帖图距离大。问问榕坚兄,当f<=0时,迭代公式为那般?IF后的z是指初始值z还是f>0时迭代的终值?这问题困扰着我,如果这问题解决,这个分形不成为问题。
loop:
    f = f - 1
  IF (f <= 0)
    f = @restart
    oldC = c
    c = z*@sign
    z = oldC
  ENDIF
     z = z^@power + c
  bailout:
  |z| <= @bailout
78# 榕坚
这个分形我决定放弃了,干了几天,越弄头脑越昏,越弄越不带劲,那位板友做出后,请帖上源文件,谢谢。
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.
86# 榕坚
榕兄在作图时,对程序中的 fz = #z^3 - a*z - a + 1里的第二项中的z是不是当作第一项中的#Z来处理的呢,我把这两个均看作#z进行处理。等势圈成半月形有问题,我把那个源文件帖在此,榕兄帮忙看看。谢谢。
未命名.JPG
问题.gsp (27.86 KB)
问题找到了,将面板上的逃逃半径0.000001再在小数点后,再加一个0,即由原来的10^-6改为10^-7,结果正常了。如果再设得更小更小一些,则半月形缩为一个点了。
未命名.JPG
每解决一个问题,又可朝前飞跃一步了,学习复分形,路上充满荆刺,也有鲜花,但荆刺毕竟多。
恭喜并感谢榕坚兄,作得真好.
这个UF分形,我以失败告终。
Carr2004 {
; Updated for UF2 by Erik Reckase, March 2000
          ; Modified Sylvie Gallet frm. [101324,3444], 1996
init:
  z=c=pixel, z1=imag(p1-cos(2*(pixel)))*z-p2
  int iter=0, int limit=round(real(p1)), float bailout=16
loop:
  IF (iter==limit)
    z = z1, c = p3
  ENDIF
  z=z*z+c
  iter=iter+1
bailout:
  |z| <= bailout
default:
  title = "Carr 2004"
  periodicity = 0
  maxiter = 500
  magn = 1.3
  center = (-.4,0)
  method = multipass
  param p1
    caption = "Iter Lim/Julia Scale"
    default = (50,1)
    hint = "The real part of this parameter acts as an \
            iteration limit, where the formula's calculation \
            changes.  The imaginary part of this parameter \
            scales the Julia structure."
  endparam
  param p2
    caption = "Julia Center"
    default = (-0.3,0)
  endparam
  param p3
    caption = "Julia Params"
    default = (-0.65,-0.4)
  endparam
}
此分形位于carr2000.ufm中
2.JPG
返回列表