返回列表 回复 发帖

UF分形程序与画板制作

我很少将画板用于教学,我觉得画板真正用在教学上的并不多。我主要用画板来玩数学,我觉得我还没发现一种软件,能将数学结合得如此紧密,并通过画板,让数学的诱人魅力得到充分的发挥。
用画板玩复变分形,个人认为最好向优秀的范例学习。个人认为,著名分形软件UF中自带的大量范例,给我们提供了绝佳的学习机会。里面五花八门的复变分形,色彩缤分,花样繁多,确有一种引人魅力,而用画板实现,又给人带来一种别样的乐趣。
本人涉足复分形以来,承蒙本坛高手的指点,引领,有点进步,,并吸收了分形版块朋友们的经验,尤其是在榕坚老师帮助下,解决了不少用画板实现分形的难关。还有常老师对用画板作分形时,退出循环的卓越见解,与提供的源文件,让画板实现分形迈上了一个新的台阶。边玩UF,边用画板实现里面的复分形,有点小收获。今响应梅老师的号召,开一帖,让大家一同玩UF并用画板实现,把快乐让更多的人分享,独乐乐,不如众乐乐。
玩好粗论分形一帖中的精典M集与J集,或者向老师的帖子《爱上分形》里的精典M集与J集(里面的逃逸时间算法造作M集,即讲了原理,又讲了步骤,又有源文件,等于手把手教,一看就会),就可以玩UF中的分形了,原理与步骤几乎是一样的,依葫芦画瓢即可。
UF中的有些符号与算法,与画板中的计算,不一样,这大家要注意。
所用工具:向老师的工具箱,常老师的复分形坐标计算工具,以及本人的几个UF小工具。
|a+bi|=a^2+b^2,
abs(a+bi)=abs(a)+abs(b)
cabs(a+bi)=sqrt(a^2+b^2),即a+bi的模。
Real(z),复数z的实部。
Imag(z),复数z的虚部。
1# 柳烟
UF范例1:(位于ahm.ufm中)
ChaosbrotJulia {
;Julia set of the "Chaosbrot" fractal.
;This once was on Wikipedia, but it got deleted.
lease petition at Talk:Chaosbrot to get it reinstated! Please!
;And I didn't even invent them!!!
init:
c=@Constant(柳烟注:这是J集,J集最后是对z赋色,所以c应定位于一固定的点。横标是什么呢?代码后面可看到Constant,后面的值就是。)
z=#Pixel
loop:
x=Real(z)
y=Imag(z)
xTemp=x^2 - y^2
y=@J*x*y
x=xTemp
z=x + y*1i + c
bailout:
|z|<=@Bailout(|z|,相当于精典M集讲义中的z’的模,但这里应按UF中的约定行事。)default:
title="Chaosbrot (Julia)"
float param Bailout
  default=10(这是阈值。大家看到我源文件中的baiout,就知这是阈值。)
画板中的M集与J集的逃逸参数:p=0.5*(1-sgn(0.5+sgn(|z|-baiout)))
endparam
complex param J
  caption="J"
  hint="This is the unnamed parameter that primarily determines the fractal."
  default=1.5(这是J的值,但是我看面板,发现那里的J不是一个实数,而是一个复数,而这里只是个特殊情况,所以决定造得更一般化。看代码应结合面板进行,有时代码不太明白的参数,一看面板上的,就了然了。)
endparam
complex param Constant  hint="This is the 'normal' parameter for the Julia Set, where its value \
  corresponds with a point in the M-Set, yada yada."
  default=(0.317,0.647)(柳烟注:这就是c的定位值。)
endparam
switch:
type="ChaosbrotMandel"
Perturbation=#pixel
J=J
}
加色部分对用画板造作复变分形重要。我的经验是,init,loop,及后面的一些值重要,其余部分几乎可不考虑。Init与loop里的算式,大家按代码的顺序算出即可,熟练后,可将几步传成一步。我在制作中,为方便大家理解,我严格按代吗进行。
大家看完代码后,再看我制作的视频,再来看代码,融会贯通后,对UF中的其它M集J集简单代码,就能读能造了。应坚持实践第一。
用画板造复分形,当新造的分形与原来造作过的分形有些部分完全一样,你可调出原来的分形,临时制作工具,这样可节省时间,提高效力。
制作视频如下:
http://u.115.com/file/f6b771bd2#
熟练后,完全可以直接算出Z‘的坐标值,不必硬要照程序一步步来。
UF中该系列的旁边的ChaosbrotMandel 的代码:
ChaosbrotMandel {
;It was sad day when this page was deleted from Wikipedia.
;Tip: In general, The Julia sets look a lot better than the M-Sets.
init:
c=#pixel
z=@Perturbation
loop:
x=Real(z)
y=Imag(z)
xTemp=x^2 - y^2
y=@J*x*y
x=xTemp
z=x + y*1i + c
bailout:
|z|<=@Bailout
switch:
type="ChaosbrotJulia"
Constant=#pixel
J=J
default:
title="Chaosbrot (Mandelbrot)"
center=(-0.5,0)
float param Bailout
  default=20
endparam
complex param J
  caption="J"
  hint="This is the unnamed parameter that primarily determines the fractal."
  default=0.6
endparam
complex param Perturbation
  default=(0,0)
endparam
}
这是个M集,大家可比照前面范例,轻二易举地造出该M集,因为迭代公式完全一样,可完全比照精典M集的逃逸时间算法,将其用画板搞出。
UF范例二:Alternating (位于ahm.ufm中)
Alternating {
; Alternates the iterations between "z^2", "z^2 + c", "z + c", and
; "z^2 + c" again. Plans include changing the period via parameter.
init:
z=@Perturb  c=#pixel
loop:
  IF (@Period == 0)
  z=z*z
  z=z*z + c + c
  z=z*z + c
柳烟注:这里的(@Period == 0)与后面的(@Period == 1)等均为开关项,相当于拉第一个开关,产生一个复分形,拉另一个开关,又产生另一个不同的复分形,此程序后面的Period
     caption="Period"
     enum="z^2, z^2+c, z+c, z^2+c" "z+c, z^2+c, z^2, z^2+c" "z+c, z^2, z^2, z+c, z^2"
其中enum部分没多大意义,其实这三个引号内的部分就是开关,你点开UF面板去找找,就心明如镜了。能不能象UF一样,在画板中将这三个复分形造来由开关控制?能。不过,有时文件过于庞大,过于复杂,我喜欢一个个造。这个分形,造在一个文件中,估计能扫得动,大家可先开动开动脑筋。当你只造第一个开关项的复分形时,后面的IF部分,就不要理了。
  
ELSEIF (@Period == 1)
  z=z + c
  z=z*z + c
  z=z*z
  z=z*z + c
  ELSEIF (@Period == 2)
  z=z+c
  z=z*z
  z=z*z
  z=z+c
  z=z*z
  ENDIF
bailout:
  |z| < @Bailout
default:
  center=(-0.25,0)
  magn=1.5
  title="Alternating"
  float param Bailout
     default=4
     min=1
     hint="Upper limit of absolute value for points in the set."
  endparam
  complex param Perturb
     caption="Perturbation"
     default=(0,0)
     hint="This allows you to change the initial value."
  endparam
  param Period
     caption="Period"
     enum="z^2, z^2+c, z+c, z^2+c" "z+c, z^2+c, z^2, z^2+c" "z+c, z^2, z^2, z+c, z^2"
     default = 2
     hint = "This is the mapping that is repeated. They are all \
     combinations of squaring and constant addition.The first two \
     options look alike, but with different perturbations they \
     produce different results."
  endparam
}
大家按我前面说的,这里的Bbaiout=4
  z=@Perturb中,Z的初值为(0,0)
成竹于胸,操作精准,柳老师功夫了得!两个视频一定要好好学习,期待后续……
辛苦了,谢谢。
柳老师身手敏捷,钦佩。
希望有更多的朋友爱上分形。
感谢几位老友捧场。
Alternating(@Period == 0).gsp (22.64 KB)
这是制作视频文件。
http://u.115.com/file/f6604e8696#
将三个开关项的不同复分形,造于一个画板文件中。
http://u.115.com/file/f65574f54f#
返回列表