返回列表 回复 发帖
就Alternating(@Period == 1).gsp ,扫几张图片:
未命名.jpg
未命名(1).jpg
周围的麻点,放大,又可找到其复制品。
中间的小血点放大,又可见到小M集。
再放大一部位:
未命名(2).jpg
UF范例3:(位于ahm.ufm中):
ScaledBwp14 {
;almost identical to BWP14, but it has been scaled
;so as to view certain values more clearly.
init:
  z = @Start
(这是最后z的定位点,面板上给出了具体定位于何处,你也可改设其它定位点,在UF面板上进行操作即可)  
PixMod = (#pixel / (cabs(sqrt(sqrt(@Exponent2+1))))) ^ @Exponent2
(这是由点#pixel 算出的新点,算式中的cabs函数,在二楼有说明。sqrt是平方根函数,@Exponent2与@Exponent21这两个复数,代码最后给出了具体的值,是个实值,但从面板上看,是个复值,你要按实数做可以,你如果要造作得更具一般化,你可设为复数。)
  c = #pixel
(这是着色前c的定位点,你如果将点c与此点合并,有时造出的复分形不对劲,差别天壤。你可按此点的横纵坐标,再造一点,再将c合并到此点即可。特别是有时见到程序中:z=c=#pixel,你如果最后将点z、c都合并到点#pixel,由于c可能没参与迭代,结果合并后,也许此点也参与迭代,结果弄出的图怪得很。故而一般不直接将两点向此点合并,这大家要注意。就象造精典M集,你将z直接合并到原点,结果造的M集不对劲,你要另造一横纵坐标为0的点,再将其合并到该点,就对了。
loop:
  z = (z ^ @Exponent1) * PixMod + c
bailout:
  |z| <= @Bailout
default:
  title = "Scaled BWP 14"
  complex param Start
    caption = "Start"
  endparam
  complex param Exponent1
    caption = "Exponent 1"
    default = 2
  endparam
  complex param Exponent2
    caption = "Exponent 2"
  endparam
  float param Bailout
    caption = "Bailout Value"
    default = 4.0
(这是阈值,在面板上也有。)
  endparam
}
ScaledBwp14 的画板制作视频:
http://u.115.com/file/f68fae5a8e#
至此,该系列的其余几个分形,大家可独自完成,没有问题了。
11# 柳烟


柳老师的讲解通俗易懂,这可是一个好贴子。这个Alternating分形我好象也做过,可是只在(@Period == 2)也就是UF的开关最后一个里扫到过小M集。在Alternating(@Period == 1)里没有找到,能否把第一张图的扫描中心位置及放大倍数告知。
14# 榕坚
是我错了,我查了我扫描的文件,正是你说的(@Period == 2)中,扫出的M集。
来一个稍微复杂点的带开关项的M集.在akl.ufm中。
MoebiusMandel {
init:
  z = @start
(柳烟注:既是M集,Z的初值定在何处呢?代码后面或面板上有,你结合面板,就知starting ponte(Re)与starting ponte(Im)即为z的定位的横纵标。)  
float xLim = abs(real(@limit))
  float yLim = abs(imag(@limit))
(在面板上能找到,接下来的二行,即是。这用来后面条件语句(IF后面的句子)中,当条件成立时,改变迭代算法而用。)
float reZ = 0
  float imZ = 0
(这两句好象是叫电脑腾出两个位子,存贮两变量reZ与imZ,对用画板制作复分形,可不考虑,事实上,这两句在画板中没啥作用。)
loop:
  z = z^@power + #pixel
(@power的值面板上有,后面也告诉了,这大家对前面几个程序应该有所熟悉,在代码后面何方,不难找到。#pixel就是C的值,将来的M集对其着色扫图的那个点。)  
reZ = real(z)
  imZ = imag(z)

  reZNew = reZ
  imZNew = imZ

  if (reZ < -xLim)
    reZNew = reZNew + 2*xLim
if (@mode == 1)
(这里的@mode是何意思?找代码后面,有
param mode
    caption = "Moebius Mode"
    enum    = "Normal" "Double" "Inverse"
    default = 0
再看面板上,找到Normal后,你点下拉菜单,可看到"Double" "Inverse",你就会恍然大悟,原来这是一个开关项。当你只某一个开关项的分形时,其余开关项有关的语句,你就别去考虑了。换句话说,一个开关项,造一个分形。理论上,所有的开关项,程序很容易实现的,画板能作出,但太繁顼,我试过,当开关项太多,一是造起来杀伤脑细胞,另由于计算过于复杂,太过秀气的几何画板吃不消,有可能扫不动。所以我喜欢一个分形一个分形去造。注意,@mode == 1成立时,对应第二个开关项"Double",当mode == 2成立时,对应第三个开关项"Inverse",当不考虑这二个开关项,也就是说mode == 1,2,将其后面的语句删去,则得第一个开关项的分形Normal)
      imZNew = imZNew - yLim
    elseif (@mode == 2)
      imZNew = -imZNew
    endif
  elseif (reZ > xLim)
    reZNew = reZNew - 2*xLim
    if (@mode == 1)
      imZNew = imZNew + yLim
    elseif (@mode == 2)
      imZNew = -imZNew
    endif
  endif

  if (imZ < -yLim)
    imZNew = imZNew + 2*yLim
    if (@mode == 1)
      reZNew = reZNew - xLim
    elseif (@mode == 2)
      reZNew = -reZNew
    endif
  elseif (imZ > yLim)
    imZNew = imZNew - 2*yLim
    if (@mode == 1)
      reZNew = reZNew + xLim
    elseif (@mode == 2)
      reZNew = reZNew
    endif
  endif

  z = reZNew + 1i*imZNew

bailout:
  |z| < @bailout
default:
  title = "Moebius' Mandel"
  center = (-0.5, 0)
  maxiter = 100
  method = multipass
  periodicity = 0

  param start
    caption = "Starting point"
    default = (0,0)
hint = "Perturbation. Use (0,0) for the standard Mandelbrot set."
(这告诉你z的定位的横纵坐标,与面板上的一致,这定位点,你可改换其它的定位坐标试试,说不定会看到比面板上还美的分形。)  
endparam

  param limit
    caption = "Moebius limits"
default = (2,2)
(这横纵坐标,前面已解说,主要用来作条件判断所用的。)  
endparam

  param mode
    caption = "Moebius Mode"
    enum    = "Normal" "Double" "Inverse"
    default = 0
  endparam

  param power
    caption = "Power"
    default = (2,0)
    hint = "This defines the power of the Mandelbrot set. Use (2,0) \
            for the standard Mandelbrot set."
(这是前面loop:
  z = z^@power + #pixel中,z的指数。)

  endparam

  param bailout
    caption = "Bailout value"
    default = 4.0(这是阈值)   
hint = "Defines how soon an orbit bails out, i.e. doesn't belong \
            to the inner set anymore."
  endparam

switch:
  type = "MoebiusJulia"
  seed = #pixel
  power = power
  bailout = bailout
  limit = limit
  mode = mode

}
解释了这通,就可以造作第一个开关项的分形了。为造好这个分形,我已作好了几个画板用于逻辑判断的算式的工具,发在此(下楼文件中),大家直接运用,提高造分形的效率。
"Normal" 的复分形。
http://u.115.com/file/f6b3bf5ff4#
扫一图。
未命名(3).jpg
MoebiusMandel(Normal).gsp (32.76 KB)
将就上楼的文件,将x[strt]设为0.000001,y[strt]=0,并将作色法改为平滑作色法,或者你自编一个含et的RGB作色,则逃逸区域得到填补,与UF中的图一致了。如图:
未命名(4).jpg
后两个开关项,我作来与UF差别太大,还没找到原因。这问题暂时打住,研究一段时间再说,若板友有知道如何作,可告知,非常感激。UF中,还有许多问题没解决。
Newton {
;
; Standard Newton fractal.
;
(这是常规N集,代码简单,通过看这种代码,便于熟悉UF的代码格式及意义,对解读复杂代码,并用画板造复杂分形打下基础。万丈高楼平地起。如果果复函数为f(z),则牛迭的迭代式为z-f(z)/f’(z)如果f(z)=z^3,导函数f’(x)=3z^2,则牛迭的迭代式为:z-(z^3-1)/3z^2,其余仿此)init:
  z = pixel
loop:
  zold = z
  z = ((p1 - 1) * z^p1 + @r) / (p1 * z ^ (p1 - 1))
(p1的值后面有告诉,为可变参数,(3,0),@r的值后面有告诉。)
bailout:
  |z - zold| >= 0.00001
(注意,这步与M集的p值不一样,这里的p=0.5*(1-sgn(0.5+sgn(|z - zold|-0.00001))),此式右边的0.00001即为阈值,也就是面板上的bailout)
default:
  title = "Newton"
  helpfile = "Uf3.chm"
  helptopic = "Html\formulas\standard\newton.html"
  maxiter = 100
  param p1
    caption = "Exponent"
    default = (3,0)
    hint = "Specifies the exponent of the equation that is solved by \
            Newton's method. Use real numbers (set the imaginary component \
            to zero) to obtain classic Newton fractals."
  endparam
  param r
    caption = "Root"
default = (1,0)
(这是@r值。)   
hint = "Specifies the root of the equation that is solved. Use larger \
            numbers for slower convergence."
  endparam
}
返回列表