返回列表 回复 发帖

解析用画板作复分形的算理

前三页为初稿,后面为算理总结,后面为实习训练

更正:
第一节中,当复数C的模大于2时,这样的点的逃逸时间<n;
第五节中,在p的除号前面少了两个右括号;
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
1.jpg
7.jpg
13.jpg
8.jpg
9.jpg
10.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
广义M集1.jpg
拜读了上文,感到这种“原理+实例”的形式非常好,降低了进入画板分形的门槛。支持xyj老师,期待着后续讲解。
又是一位慷慨自信的高手。期待后续...
希望能把各阶段的画板文件也贴上来,更便于理解。
不知怎么回事,我有三天没有打开论坛,今早有幸进入,见到了久违的页面,倍感亲切,并阅读了xyj200909老师大作,受益匪浅,xyj200909老师总结了用画板作复分形的方法步骤,既有理论又有实践,全面深刻,浅显易懂,是初学者的好教材,期待后续.
嘿嘿,我这既不是大作,写的时候也不自信,而是有点心虚地写了个总结吧。
记得以前的一个老师说过,你要想学好某门课,那你就教授这门课!这也是我想多学些的一个手段,让大家见笑了。
提出来后,已经有向老师给我进行了指点,如果有更多的老师给予指引交流,才符合了我这样做的初衷,期待!
xyj老师曾经作过四元数分形,我想这在画板分形中应是首创。过去技术还不成熟,无法实现立体图形消隐效果,所以效果不佳。现在有了常老师的叠层技术和光照技术,四元数分形的画板实现应该是时机了吧。
J.jpg
2011-8-7 10:43
6# xiaongxp


这个有点诱人,但不知画板的速度是否跟得上。因为四元数做分形的计算量相当大啊。
捕获.JPG
7# math
是的,计算量相当大。许多专业软件都把作M体和J体的迭代次数设在10~15,因为对四元数分形需要的是空间结构而无需细部的精致,想来画板也不必突破这一范围。
这是UF中关于四元数分形的范例,代码太简单了,但是看不懂。看来还得再来一次协作:
REB_3DFractalRayTrace {
;
$define debug
global:
  import "common.ulb"
  import "reb.ulb"
  REB_3DFractalRayTrace f = new @formulaClass(0)
init:
  #z = f.Init(#pixel)
loop:
  #z = f.Iterate(#z)
bailout:
  !f.IsBailedOut(#z)
default:
  title = "3D Fractal Raytrace (UF5)"
  maxiter = 100
  center = (0, 0)
  periodicity = 0
  method = multipass
        int param v_3DFractalRaytrace
                caption = "Version (3DFractalRaytrace)"
                default = 100
                hint = "This version parameter is used to detect when a change has been made to the formula that is incompatible with the previous version. When that happens, this field will reflect the old version number to alert you to the fact that an alternate rendering is being used."
                visible = @v_3DFractalRaytrace < 100
        endparam
  REB_3DFractalRayTrace param formulaClass
    caption = "3D Fractal Raytrace"
    default = REB_3DFractalRayTrace
    selectable = false
  endparam
}
迭代20次的图形:
Fractal1.jpg
四元数分形是平面分形的推广,比如作四元数M集,应该是将平面的情况推广到了空间。也是做迭代:
q(n+1)^2=q(n)^2+c,其中q(n)=[0,x(n),y(n),z(n)]
这时应该使得四元数点[w,x,y,z](w开始取0即可,也就只剩下x,y,z)取遍空间内任一点,利用四元数计算法则,算出迭代像,,最后的w可以不用,然后再利用空间坐标变换,将得到的像(x,y,z)变成屏幕上的二维点。
返回列表