Board logo

标题: 复分形难题再度征解 [打印本页]

作者: 柳烟    时间: 2011-2-20 11:22     标题: 复分形难题再度征解

搞了好几遍,尝试了各种情形,仍不能得出结果:
Carr1965 {
; Updated for UF2 by Erik Reckase, March 2000
           ; Modified Sylvie Gallet frm.
init:
  z=c=pixel
  int compt=0, int limit=round(real(p1)), float bailout=4
loop:
  IF (compt>=limit)
    c = (-.743380900000982,.131850030300002)
  ELSE
    c = z + c/2.125
  ENDIF
  z=z*z+c
  compt=compt+1
bailout:
  |real(z)|<=bailout
default:
  title = "Carr 1965"
  periodicity = 0
  maxiter = 500
  magn = .9
  center = (0,0)
  method = multipass
  param p1
    caption = "Iter Limit"
    default = (100,0)
    hint = "The real part of this parameter signals a change \
            in the value of c. The imaginary part is not used."
  endparam
}
UF中效果图如下:
Fractal2.jpg

图片附件: Fractal2.jpg (2011-2-20 12:40, 29.52 KB) / 下载次数 1639
http://inrm3d.cn/attachment.php?aid=10235&k=cc5b6dbe738ca7f1497357cda8220729&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-20 13:01

昨天干了五六遍,失败,今天干了一上午,失败了三次,终于我已经找到解决方案了,正在扫描。
未命名2.jpg
改变P1的横坐标为2,得:
未命名1.jpg

图片附件: 未命名1.jpg (2011-2-23 10:22, 29.36 KB) / 下载次数 1632
http://inrm3d.cn/attachment.php?aid=10241&k=ec2a30bf5228f470787c25dddc26ec55&t=1715005041&sid=13u6OU



图片附件: 未命名2.jpg (2011-2-23 10:22, 23.71 KB) / 下载次数 1645
http://inrm3d.cn/attachment.php?aid=10242&k=63720529eda61e26a13171be95a68e4d&t=1715005041&sid=13u6OU


作者: 榕坚    时间: 2011-2-20 20:59

这个结果很有诱惑力,可是没办法完成:
pgd_Twofold2_Julia {
  ; Two-fold rotational symmetry and complementary critical
  ; point fates make for some very intertwining (and
  ; entertaining) Julia sets.
  ; f(z) = (z^2 - 1/3)/cz^3
global:
  bool foundatt1 = false
  bool foundatt2 = true
  complex att1 = 1
  complex att2 = -1
  float b = 1/@bailout
  int j = 0
  ; Locate attractor 1 goes to, if any.
  WHILE (j < #maxit)
    att1 = (sqr(att1) - 1/3)/(@seed * sqr(att1) * att1)
    j = j + 1
  ENDWHILE
  ; Is it really an attractor? Or did it just wander off
  ; and die somewhere? Is the attractor self-complementary
  ; or is there a distinct mirror attractor?
  j = 0
  complex a = att1
  WHILE (j < #maxit)
    att1 = (sqr(att1) - 1/3)/(@seed * sqr(att1) * att1)
    IF (|att1 - a| < b)
      foundatt1 = true      ; it repeated, yay!
    ENDIF
    att2 = (sqr(att2) - 1/3)/(@seed * sqr(att2) * att2)
    IF (|att2 - a| < b)
      foundatt2 = false      ; other cp went to same.
    ENDIF
    j = j + 1
  ENDWHILE
init:
  z = #pixel
  bool notdone = true
  bool landedright = false
  IF ((@what == 1) && (!foundatt1))
    notdone = false
  ENDIF
  IF ((@what == 2) && (!foundatt2))
    notdone = false
  ENDIF
  i = 0
loop:
  z = (sqr(z) - 1/3)/(@seed * sqr(z) * z)
  IF (|z| > @bailout)
    notdone = false
    landedright = (@what == 0)
  ENDIF
  IF (foundatt1)
    IF (|z - att1| < b)
      notdone = false
      landedright = (@what == 1)
    ENDIF
  ENDIF
  IF (foundatt2)
    IF (|z - att2| < b)
      notdone = false
      landedright = (@what == 2)
    ENDIF
  ENDIF
  IF (i == #maxit)
    IF (@what != 3)
      notdone = false
      landedright = false
    ENDIF
  ENDIF
  i = i + 1
  IF (!notdone)
    IF (!landedright)
      z = (501,10)  ; Tell Smooth (Generalized) 2 to color this thing solid.
    ENDIF
  ENDIF
bailout:
  notdone
default:
  title = "Twofold2 Julia"
  periodicity = 0
  maxiter = 1000
  method = onepass
  magn = 0.5
  param seed
    caption = "Julia seed"
    default = (0.75, 0)
  endparam
  param what
    caption = "Draw what"
    enum = "Main basin" "Other attractor #1" "Other attractor #2" "Trapped points"
    default = 0
  endparam
  param bailout
    caption = "Bailout"
    hint = "Escape radius (inverse is used for finite attractors)"
    default = 100000.0
    min = 0
  endparam
switch:
  type = "pgd_Twofold2_Mandel"
  bailout = bailout
}

图片附件: Fractal1.jpg (2011-2-20 20:59, 52.69 KB) / 下载次数 1779
http://inrm3d.cn/attachment.php?aid=10252&k=d3a35c29a77a0f66e57623d621c4c045&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-20 21:10

这个代码读起来,太费脑细胞了,UF中有几个分形代码,要么太过漫长,要么逻辑判断太多,作起来太费劲,只好望洋兴叹了。
作者: 榕坚    时间: 2011-2-22 10:51

这个应该就是分形边界的一种构造方法,把内、外部都挖空了,要通过多次迭代才能完成。
作者: 榕坚    时间: 2011-2-22 15:58

实在挡不住诱惑,虽然伤了很多脑细胞但算是有成果:

图片附件: pgd_Twofold2_Julia.JPG (2011-2-22 15:58, 39.51 KB) / 下载次数 1569
http://inrm3d.cn/attachment.php?aid=10295&k=e7ece63305c458eb46159e32948dc851&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-22 16:03

这个代码,我可读不懂了。榕兄作得不错。
作者: 榕坚    时间: 2011-2-22 16:19

7# 柳烟


在对Z迭代之前先进行两次迭代获得一些准备数值,其它的就是按照代码依样画葫芦了。另一个它的“M"集那真是没办法了(其中有数组变量不知怎么转为几何画板能完成的),分开结构非常漂亮:
pgd_Twofold2_Mandel {
  ; Two-fold rotational symmetry and complementary critical
  ; point fates make for some very intertwining (and
  ; entertaining) Julia sets.
  ; f(z) = (z^2 - 1/3)/cz^3
init:
  z = 1
  bool notdone = true
  bool landedright = false
  int i = 0
  int j = 0
  bool odd = false
  complex z_values[@zmax]
  float b = 1/@bailout
loop:
  z = (sqr(z) - 1/3)/(#pixel * sqr(z) * z)
  IF (|z| > @bailout)
    notdone = false
    landedright = (@what == 0)
  ENDIF
  z_values = z
  IF (odd)
    IF (|z - z_values[j]| < b)
      notdone = false
      complex w = -1
      j = 0
      bool sep = true
      WHILE ((j < #maxit) && sep)
        w = (sqr(w) - 1/3)/(#pixel * sqr(w) * w)
        IF (|w - z| < b)
          sep = false
        ENDIF
        j = j + 1
      ENDWHILE
      IF (sep)
        landedright = (@what == 2)
      ELSE
        landedright = (@what == 1)
      ENDIF
    ENDIF
    j = j + 1
  ENDIF
  odd = !odd
  i = i + 1
  IF (i == @zmax)
    IF (@what != 3)
      notdone = false
      landedright = false
    ENDIF
  ENDIF
  IF (!notdone)
    IF (!landedright)
      z = (501,10)  ; Tell Smooth (Generalized) 2 to color this thing solid.
    ENDIF
  ENDIF
bailout:
  notdone
default:
  title = "Twofold2 Mandelbrot"
  periodicity = 0
  maxiter = 1000
  method = onepass
  param what
    caption = "Draw what"
    enum = "Main basin" "One finite attractor" "Two attractors" "Trapped points"
    default = 0
  endparam
  param zmax
    caption = "Max iters to record"
    default = 1000
  endparam
  param bailout
    caption = "Bailout"
    hint = "Escape radius (inverse is used for finite attractors)"
    default = 100000.0
    min = 0
  endparam
switch:
  type = "pgd_Twofold2_Julia"
  seed = #pixel
  bailout = bailout
}

图片附件: 捕获.JPG (2011-2-22 16:19, 94.01 KB) / 下载次数 1730
http://inrm3d.cn/attachment.php?aid=10297&k=11ff32d7c1010c2af4c35d1c795cb7bd&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-22 16:34

8# 榕坚
谢谢。佩服老兄的钻研精神与思维的敏捷。UF中,每当我看到这种代码,就如珠峰挡在前面。对这种逻辑判断太多的分形,我是望而生畏。榕兄有空时,能否制成视频,详细反映出制作过程。注意有空时。另还有一个分形,是谢尔宾斯基三角形,代码也十分漫长,一时忘了在何处,我找着后发在这里。
作者: 柳烟    时间: 2011-2-23 09:15

位于gnd.ufm中,
gnd-slope-sierpinski2 {
; Based on a formula by Ramiro Perez
; Slope version by Gilles Nadeau, 2007
init:
  z1 = #pixel
  z2 = #pixel + @offset
  z3 = #pixel + flip(@offset)
  int done = 2
  float modz = 0.0
  float e1 = 0.0         ; potentials
  float e2 = 0.0
  float e3 = 0.0
  float vx = 0.0         ; normal vector
  float vy = 0.0
  float vz = 0.0
  float vd = 0.0
  float iterexp1 = 0.0
  float iterexp2 = 0.0
  float iterexp3 = 0.0

loop:

  IF ((imag(z1)>=.575*real(z1)) && (-.575*real(z1)<=imag(z1)))
    z1 = 2*z1-1i
  ELSEIF (real(z1)<=0)
    z1 = 2*z1+(.8660254, 0.5)
  ELSEIF (real(z1)>0)
    z1 = 2*z1+(-.8660254, 0.5)
  ELSE
    z1 = 2*z1
  ENDIF

  IF ((imag(z2)>=.575*real(z2)) && (-.575*real(z2)<=imag(z2)))
    z2 = 2*z2-1i
  ELSEIF (real(z2)<=0)
    z2 = 2*z2+(.8660254, 0.5)
  ELSEIF (real(z2)>0)
    z2 = 2*z2+(-.8660254, 0.5)
  ELSE
    z2 = 2*z2
  ENDIF

  IF ((imag(z3)>=.575*real(z3)) && (-.575*real(z3)<=imag(z3)))
    z3 = 2*z3-1i
  ELSEIF (real(z3)<=0)
    z3 = 2*z3+(.8660254, 0.5)
  ELSEIF (real(z3)>0)
    z3 = 2*z3+(-.8660254, 0.5)
  ELSE
    z3 = 2*z3
  ENDIF
  
  modz = |z1|
  
  iterexp1 = iterexp1 + exp(-cabs(z1))
  iterexp2 = iterexp2 + exp(-cabs(z2))
  iterexp3 = iterexp3 + exp(-cabs(z3))
  done = done + 1         ; increment iteration counter

  IF (modz > @bailout ||       \
      @everyiter ||            \
      done == #maxit + 2)      ; done, or every iteration, or last
    ; determine continuous iteration (height) for each point
      e1 = iterexp1 * @zscale
      e2 = iterexp2 * @zscale
      e3 = iterexp3 * @zscale

    ; apply transfer function
    ; a function is not used because these are floats
    ; and not all functions apply to floats
    IF (@xfer == 1)             ; log
      e1 = log(e1)
      e2 = log(e2)
      e3 = log(e3)
    ELSEIF (@xfer == 2)         ; sqrt
      e1 = sqrt(e1)
      e2 = sqrt(e2)
      e3 = sqrt(e3)
    ELSEIF (@xfer == 3)         ; cuberoot
      e1 = (e1)^(1/3)
      e2 = (e2)^(1/3)
      e3 = (e3)^(1/3)
    ELSEIF (@xfer == 4)         ; exp
      e1 = exp(e1)
      e2 = exp(e2)
      e3 = exp(e3)
    ELSEIF (@xfer == 5)         ; sqr
      e1 = sqr(e1)
      e2 = sqr(e2)
      e3 = sqr(e3)
    ELSEIF (@xfer == 6)         ; cube
      e1 = (e1)^3
      e2 = (e2)^3
      e3 = (e3)^3
    ELSEIF (@xfer == 7)         ; sin
      e1 = sin(e1)
      e2 = sin(e2)
      e3 = sin(e3)
    ELSEIF (@xfer == 8)         ; cos
      e1 = cos(e1)
      e2 = cos(e2)
      e3 = cos(e3)
    ELSEIF (@xfer == 9)         ; tan
      e1 = tan(e1)
      e2 = tan(e2)
      e3 = tan(e3)
    ENDIF

    ; apply post-scale
    e1 = e1 * @zscale2
    e2 = e2 * @zscale2
    e3 = e3 * @zscale2

      vx = e2-e1
      vy = e3-e1
      vz = -@offset
      ; normalize vector
      vd = 1/sqrt(sqr(vx)+sqr(vy)+sqr(vz))
      vx = vx*vd
      vy = vy*vd
      vz = vz*vd
      z = vx + flip(vy)         ; fudge z from vector
  ELSE               ; didn't compute z this time
    z = z1            ; use primary iteration value to keep
                      ; periodicity working
  ENDIF
  IF (modz > @bailout)         ; we're done
    done = 0
  ENDIF

bailout:
  (done > 0)
default:
  title = "Slope Sierpinski Triangle II"
  center = (0.0, 0.0)
  magn = 1.1538
  maxiter = 149
  method = multipass
  periodicity = 0

  float param version
    default = 1.1
    visible = false
  endparam

  param bailout
    caption = "Bailout value"
    default = 127
    min = 1
  endparam

  param offset
    caption = "Orbit Separation"
    default = 0.01
    hint = "Defines how far apart the simultaneous orbits are.  Smaller \
            distances will produce more accurate results."
  endparam
  param xfer
    caption = "Height Transfer"
    default = 0
    enum = "linear" "log" "sqrt" "cuberoot" "exp" "sqr" "cube" \
    "sin" "cos" "tan"
    hint = "This function will be applied to the height value \
            before a slope is calculated."
  endparam
  param zscale
    caption = "Height Pre-Scale"
    default = 1.0
    hint = "Specifies the ratio between height and distance.  Higher \
            values will exaggerate differences between high and low. \
       In general, you will want to use smaller numbers here."
  endparam
  param zscale2
    caption = "Height Post-Scale"
    default = 0.025
    hint = "Specifies the ratio between height and distance; like \
            Height Pre-Scale, except that this value is applied after \
       the transfer function."
  endparam
  param everyiter
    caption = "Every Iteration"
    default = false
    hint = "If set, the surface normal will be computed at every \
            iteration.  If you are using a coloring algorithm which \
       processes every iteration, you will need this."
  endparam
}
Fractal2.jpg
我从面板上看了,好象那些函数开关项,一点作用都不起,榕兄再看看,是不是这样。

图片附件: Fractal2.jpg (2011-2-23 10:20, 26.16 KB) / 下载次数 1600
http://inrm3d.cn/attachment.php?aid=10322&k=dae0454263abf50a1304f965bb328412&t=1715005041&sid=13u6OU


作者: 榕坚    时间: 2011-2-23 10:22

10# 柳烟


做这个可是要有十足的耐心和充裕的时间哪。之前做过任意三角形的谢氏三角形,但不是UF的算法。等有空的时间再来试试。这种代码应该是可以用几何画板演绎的。
作者: 柳烟    时间: 2011-2-23 10:44

11# 榕坚
这个代码还容易解读,确实需要时间与足够的耐心才成。我先帖在这儿,我也觉得有点麻烦,先干到其它的,等时间合适,再来尝试尝试。我看到此图不错,萌发了制造出来的欲念。
作者: changxde    时间: 2011-2-23 11:15

sanj.JPG
从UF中没看出参数的影响。

图片附件: sanj.JPG (2011-2-23 11:15, 16.66 KB) / 下载次数 1558
http://inrm3d.cn/attachment.php?aid=10328&k=269a36c4edfe3b3a5acbbe6b1073c244&t=1715005041&sid=13u6OU


作者: 榕坚    时间: 2011-2-23 21:48

10# 柳烟


好象是有影响的,这是用函数ln(x)的结果:

图片附件: 捕获.JPG (2011-2-23 21:48, 38.78 KB) / 下载次数 1611
http://inrm3d.cn/attachment.php?aid=10346&k=13dc53a4b7840194360804cdb8ee206f&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-23 22:00

14# 榕坚
榕兄速度真快,做得十分漂亮,佩服。我明天做做看,不懂再请教,这代码长,一看有些胆怯。
IF (modz > @bailout ||       \
      @everyiter ||            \
中的@everyiter是什么意思,你是如何处理的呢?问好。
作者: 榕坚    时间: 2011-2-23 22:34

15# 柳烟


面板中的开关项,值为0或1.
作者: 柳烟    时间: 2011-2-24 09:48

init:
  z1 = #pixel
  z2 = #pixel + @offset
  z3 = #pixel + flip(@offset)

IF ((imag(z1)>=.575*real(z1)) && (-.575*real(z1)<=imag(z1)))
    z1 = 2*z1-1i
  ELSEIF (real(z1)<=0)
    z1 = 2*z1+(.8660254, 0.5)
  ELSEIF (real(z1)>0)
    z1 = 2*z1+(-.8660254, 0.5)
  ELSE
    z1 = 2*z1
  ENDIF
我用画板造此分形时,我在理解这段代码时,卡住了!这段代码的意思是:满足不同的条件时,Z1的算法不同,由红色部分的 Z1,判断当((imag(z1)>=.575*real(z1)) && (-.575*real(z1)<=imag(z1)))成立时,按前面红色部分的z1计算 z1 = 2*z1-1i。当此条件不成立,而按红色部分的z1判断real(z1)<=0成立时,由红色部分的z1按算式z1 = 2*z1+(.8660254, 0.5)算出z1;当这二个条件均不成立,但real(z1)>0成立,则按 z1 = 2*z1+(-.8660254, 0.5)仍由红色的z1代入此式算z1.
这样问题出现了,ELSE下的算式,意思是上面三种情况均不满足,按z1 = 2*z1算z1,但当同时否定上面三种情况时,似又出现三种情况之一,这矛盾,如何解决呢?或者是我理解有误?
作者: 榕坚    时间: 2011-2-24 16:18

其实起作用的是:
IF ((imag(z1)>=.575*real(z1)) && (-.575*real(z1)<=imag(z1)))
    z1 = 2*z1-1i
  ELSEIF (real(z1)<=0)
    z1 = 2*z1+(.8660254, 0.5)
  ELSE
    z1 = 2*z1+(-.8660254, 0.5)
ENDIF
从代码看不会执行:Z1=2*Z1 ,我就把它删了。
作者: 柳烟    时间: 2011-2-24 18:04

18# 榕坚
谢过榕兄指点,我正在画板中准备各数据,这段:
IF (modz > @bailout ||       \
      @everyiter ||            \
      done == #maxit + 2)      ; done, or every iteration, or last
    ; determine continuous iteration (height) for each point
      e1 = iterexp1 * @zscale
      e2 = iterexp2 * @zscale
      e3 = iterexp3 * @zscale
中的条件:modz > @bailout ||       \
      @everyiter ||            \
      done == #maxit + 2如何处理?之前的数据已经准备好了,到这里,又进行不下去了。
作者: 榕坚    时间: 2011-2-24 21:41

if1:0.5*(1+sgn(sgn(modZ-@bailout)-0.5))
if2: @everyiter
if3:1-abs(sgn(done-(n+2)))
IF=sgn(if1+if2+if3)
n为迭代次数,@everyiter的值预先赋以0或1。
作者: 柳烟    时间: 2011-2-25 11:41

完成后,扫不出图,检查了几遍,找不到问题在那里。我想可能是逻辑判断出错,迭代问题,也可能是其它问题,我发文件在这,榕兄抽空看看,帮找找原因。谢谢。
谢氏三角形尝试.gsp (43.22 KB)

附件: 谢氏三角形尝试.gsp (2011-2-25 11:41, 43.22 KB) / 下载次数 2362
http://inrm3d.cn/attachment.php?aid=10373&k=bf881a22703814b3854e30204908288c&t=1715005041&sid=13u6OU
作者: 榕坚    时间: 2011-2-26 19:50

21# 柳烟


已经帮你改好了,顺便扫描一图:

图片附件: 捕获.JPG (2011-2-26 19:50, 32.73 KB) / 下载次数 1483
http://inrm3d.cn/attachment.php?aid=10401&k=31142c996dc663eab83c296fdecd962c&t=1715005041&sid=13u6OU



附件: 谢氏三角形尝试.gsp (2011-2-26 19:50, 45.41 KB) / 下载次数 1918
http://inrm3d.cn/attachment.php?aid=10402&k=8a836ef82145275a1ad61ea9c933cbde&t=1715005041&sid=13u6OU
作者: 柳烟    时间: 2011-2-27 11:09

22# 榕坚
感谢榕兄帮忙找错误原因,并修改正确。下来我对照你改的文件,再结合代码,找问题之所在。这个题目解决后,UF中的sg.ufm系列里的最后几个分形的代码,与此分形代码类似,解决起来应该说就容易了。问好。
作者: 柳烟    时间: 2011-2-28 09:41

22# 榕坚
这两天,我在看你修改后的文件,有二问请教:
1、修改后的文件扫出的图片,从右斜向左有一朦胧的斜线,不知原因为何。
2、该分形的迭代是否有点多,从t4、t5、……、t11,还有e1、e2、e3等,都要参与迭代呢?好象是这样。
作者: 榕坚    时间: 2011-2-28 11:11

24# 柳烟


1、不止右边有那条斜线,左边也有。那是着色的问题UF中也有(因为你选的着色类型是BASIC所以看不见)。几何画板也可以调成没有那条线。附图:
2、这个分形的迭代原象比较多,我是按代码要求给的。至于是否可以删减可以尝试。

图片附件: Fractal1.jpg (2011-2-28 11:11, 35.98 KB) / 下载次数 1474
http://inrm3d.cn/attachment.php?aid=10435&k=eb0ba42f2cff21a3f7de5d708bb2a1c0&t=1715005041&sid=13u6OU



图片附件: Fractal1.jpg (2011-2-28 11:12, 49.27 KB) / 下载次数 1489
http://inrm3d.cn/attachment.php?aid=10436&k=8783f6cc9d808b61e09f1019fb4525e2&t=1715005041&sid=13u6OU



图片附件: gnd-slope-sierpinski2.JPG (2011-2-28 11:16, 46.88 KB) / 下载次数 1468
http://inrm3d.cn/attachment.php?aid=10437&k=478190f0a00ab6397968aacc0571e430&t=1715005041&sid=13u6OU


作者: 榕坚    时间: 2011-2-28 11:23

面板中的函数改变好象只是逃逸区的形状有些变化,这是选tan函数的:

图片附件: 捕获.JPG (2011-2-28 11:23, 64.98 KB) / 下载次数 1646
http://inrm3d.cn/attachment.php?aid=10438&k=8e21a6d6ee3ce4d6420dafe4c4c04f8e&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-28 11:49

原来如此,明白了,谢谢。
作者: 柳烟    时间: 2011-2-28 22:08

位于tfa.ufm系列中的:mandala Epsilon Julia
mandalaEpsilonJulia {
; Toby Marshall, Jan 2002
init:
  z = #pixel
  complex fudge = @fudge*(0.0,1.0)
  
  loop:
  z = fn1(fn2(z^@e1-@budge)*fn4(imag(@seed^@e3-fudge))^@fn5(real(@seed^@e4-@kludge)))^fn3(@pow/((@seed^@e2)-@nudge))
  bailout:
  |z| < @bailout
  switch:
  type = "mandalaepsilon"
  bailout = bailout
  fn1 = @fn1
  fn2 = @fn2
  fn3 = @fn3
  fn4 = @fn4
  fn5 = @fn5
  budge = @budge
  nudge = @nudge
  kludge = @kludge
  fudge = @fudge
  e1 = @e1
  e2 = @e2
  e3 = @e3
  e4 = @e4
  pow = @pow


  default:
  title = "mandala epsilon julia"
  periodicity = 0
  maxiter = 500
  param bailout
  caption = "bailout"
  default = 7.0
  endparam
  param seed
  caption = "seed"
  default = (0.95, -0.332)
  endparam
  param e1
  caption = "exponent1"
  default = (3.0,0.0)
  hint = "The real component determines the number \
   of arms in the figure. The imaginary component \
   changes the scale of the elements moving around the figure."
  endparam
  param e2
  caption = "exponent2"
  default = (1.0,0.0)
  endparam
  param e3
  caption = "exponent3"
  default = (1.0,0.0)
  endparam
  param e4
  caption = "exponent4"
  default = (1.0,0.0)
  endparam
  param budge
  caption = "budge"
  default = (0.0,0.0)
  endparam
  param fudge
  caption = "fudge"
  default = 0.0
  endparam
  param kludge
  caption = "kludge"
  default = 0.0
  endparam
  param nudge
  caption = "nudge"
  default = (0.0,0.0)
  endparam
  param pow
  caption = "power"
  default = (1.0,0.0)
  endparam

  func fn1
  caption = "function 1"
  default = flip ()
  endfunc
  func fn2
  caption = "function 2"
  default = conj ()
  endfunc
func fn3
  caption = "function 3"
  default = log ()
  endfunc
  func fn4
  caption = "function 4"
  default = ident ()
  endfunc
  func fn5
  caption = "function 5"
  default = ident ()
  endfunc
}
Fractal4.jpg

图片附件: Fractal4.jpg (2011-3-1 08:52, 69.79 KB) / 下载次数 1445
http://inrm3d.cn/attachment.php?aid=10445&k=2dcf399bb6fe426c3b72e160481d3832&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-2-28 22:15

z = fn1(fn2(z^@e1-@budge)*fn4(imag(@seed^@e3-fudge))^@fn5(real(@seed^@e4-@kludge)))^fn3(@pow/((@seed^@e2)-@nudge))
此分形看起来不错的,按此算式,应该先算红色部分的绿色部分次方,但我算出后,无意义,下面不知如何办了。
作者: 榕坚    时间: 2011-3-1 08:25

29# 柳烟


变通一下:
作者: 榕坚    时间: 2011-3-1 08:26

传图片卡住了:

图片附件: mandalaEpsilonJulia.JPG (2011-3-1 08:53, 46.45 KB) / 下载次数 2592
http://inrm3d.cn/attachment.php?aid=10453&k=9f614ecbad89ab03a8171b27f884fdff&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-3-1 08:41

30# 榕坚
如何变通?
作者: inRm    时间: 2011-3-1 08:54

31# 榕坚
这个别致,很强的立体感和金属感。
作者: 榕坚    时间: 2011-3-1 09:11

32# 柳烟


这是指数幂运算的不尽人意问题了,因为底数为负值时几何画板认定为无意义的。只要把底数改为复数(如(-2)^3改为real((-2,0)^3))就不会出现不存在了。
作者: 柳烟    时间: 2011-3-1 09:23

它后面的mandalaGammaJulia,将seed实部改为0.93,扫出的图不错,放**点,居然又发现直线分形。
未命名.jpg
未命名.jpg
未命名(1).jpg

图片附件: 未命名.jpg (2011-3-1 09:33, 41.03 KB) / 下载次数 2358
http://inrm3d.cn/attachment.php?aid=10456&k=ebeb67defb093f54fdc58ee59e9c42dd&t=1715005041&sid=13u6OU



图片附件: 未命名.jpg (2011-3-1 17:50, 29.41 KB) / 下载次数 2397
http://inrm3d.cn/attachment.php?aid=10460&k=6e88065e6d4bb6eabc73b2df07e4bce1&t=1715005041&sid=13u6OU



图片附件: 未命名(1).jpg (2011-3-1 17:50, 9.65 KB) / 下载次数 2359
http://inrm3d.cn/attachment.php?aid=10461&k=d040b6d88654be65c56a8fb5eeeccb9e&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-3-1 09:27

34# 榕坚
此变通太神妙了!
作者: 榕坚    时间: 2011-3-1 11:27


mandalaGammaJulia-2.JPG

图片附件: mandalaGammaJulia-2.JPG (2011-3-1 17:51, 45.52 KB) / 下载次数 2624
http://inrm3d.cn/attachment.php?aid=10458&k=c84d01ac00332ad3b27f196949b44c24&t=1715005041&sid=13u6OU


作者: 榕坚    时间: 2011-3-1 11:42

35# 柳烟


改一下确实好看多了:

图片附件: mandalaGammaJulia-1.JPG (2011-3-1 11:42, 50.68 KB) / 下载次数 2839
http://inrm3d.cn/attachment.php?aid=10459&k=2d349e3e6f18741a82270f71cdc24fcb&t=1715005041&sid=13u6OU


作者: 柳烟    时间: 2011-3-1 16:14

38# 榕坚
是的。这类分形的美有其特色,玩起来有趣。
作者: 柳烟    时间: 2011-3-3 10:00

位于sam.ufm系列中的科赫雪花曲线,我看了,扫描法出来的图形,美。我正在造第一个开关项,觉得这开关项可能简单点,单就这开关项的程序还没完全懂,我感觉到此分形能用几何画板做。
KochCurve {
; By Samuel Monnier, 2.1.00
init:
  z = #pixel
  zz = 0
  ; Twist
  z = 1/sqrt(@r)*real(z) + 1i*sqrt(@r)*imag(z)
  x = real(z)
  y = imag(z)
  sq3 = sqrt(3)
  bool bail2 = false
  bool bail = false
  i = 0
loop:
  i = i + 1
  ;----------------
  ; First Iteration
  ;----------------
  if i == 2
   
   
   
    ; Calculate the argument of z
    arg = atan2(z)
  
    ; Inside approximation
    if @region == 0 || @region == 2
  
      ; Draw the Star of David
      if (y + 1/sq3 > 0) && (sq3*x - y + 2/sq3 > 0) \
         && (sq3*x + y - 2/sq3 < 0)
        bail = true
      endif
      if (-y + 1/sq3 > 0) && (sq3*x + y + 2/sq3 > 0) \
         && (sq3*x - y - 2/sq3 < 0)
        bail = true
      endif
   
      ; Deal the case where z needs a rotation
      if (arg > 5/6*pi) || (arg < -pi/2)
        z = z*exp(1i*4/3*pi)
      endif
      if (arg < pi/6) && (arg > -pi/2)
        z = z*exp(1i*2/3*pi)
      endif
      z = z - 1i*1/sq3
      if @region == 2
        zz = z
        z = #pixel
      endif
    endif
  
    ; Outside approximation
    if @region == 1 || @region == 2
  
      ; Draw the hexagon
      if |x| > 1 || x/sq3 + y - 2*sq3/3 > 0 \
         || x/sq3 + y + 2*sq3/3 < 0 || x/sq3 \
         - y + 2*sq3/3 < 0 || x/sq3 - y - \
         2*sq3/3 > 0
        bail = true
      endif
   
      ; Deal the case where z needs a rotation
      if (abs(arg) < pi/6)
        z = z*exp(-1i*pi/2)
      elseif (arg > pi/6) && (arg < pi/2)
        z = z*exp(-1i*5*pi/6)
      elseif (arg > pi/2) && (arg < 5*pi/6)
        z = z*exp(1i*5*pi/6)
      elseif (abs(arg) > 5*pi/6)
        z = z*exp(1i*pi/2)
      elseif (arg < -pi/6) && (arg > -pi/2)
        z = z*exp(-1i*pi/6)
      elseif (arg < -pi/2) && (arg > -5*pi/6)
        z = z*exp(1i*pi/6)
      endif
      z = z + 1i
      z = sq3*z
      
    endif
  
  ;----------------
  ;Other Iterations
  ;----------------
  elseif i > 2
    ; "Undo" the offset parameter's
    ; action
    z = z + @offset
    z = 1/sqrt(@r)*real(z) + 1i*sqrt(@r)*imag(z)
    if @region == 2
      oldz = z
      z = zz
      zz = oldz
    endif
    ; Magnify z so that a simple formula
    ; allows to compute...
    z = 3*z
    x = real(z)
    y = imag(z)
    ; ...the new triangle on the segment   
    if (y > 0) && (sq3*x - y + sq3 > 0) \
       && (sq3*x + y - sq3 < 0)
      bail2 = true
    endif
    ; Restore the original value of z
    z = z/3
  
    x = real(z)
    y = imag(z)
    ; Transforms the left segment
    if x < -1/3
      z = 3*z + 2
    ; Transforms the right segment
    elseif x > 1/3
      z = 3*z - 2
    else
      ; Transforms the middle-left segment
      if x < 0
        z = z + 1/3
        z = z*exp(-1i*pi/3)
        z = 3*z - 1
      ; Transforms the middle-right segment
      else
        z = z - 1/3
        z = z*exp(1i*pi/3)
        z = 3*z + 1
      endif
    endif
  
  endif
  
  ; A parameter to fool some coloring
  ; algorythms like final decomposition...
  if i >= 2
    z = z - @offset
  endif
  
bailout:
  bail == false && bail2 == false
  
default:
  title = "Koch Curve"
  helpfile = "sam-help/kochcurves.htm"
  helptopic = "kcurve"
  magn = 1.5
  center = (0.0002,0)
  maxiter = 50
  param region
    caption = "Trapped Region"
    default = 0
    enum = "Inside" "Outside" "Both"
  endparam
  param offset
    caption = "Offset"
    default = (0,0)
  endparam
  param r
    caption = "Twist Parameter"
    default = (1,0)
  endparam  
}
作者: 柳烟    时间: 2011-3-3 10:04

Fractal1.jpg

图片附件: Fractal1.jpg (2011-3-3 17:52, 27.32 KB) / 下载次数 622
http://inrm3d.cn/attachment.php?aid=10521&k=38d43a8a09b839ee7950ee675018683a&t=1715005041&sid=13u6OU


作者: 榕坚    时间: 2011-3-3 15:16

40# 柳烟


这个才真是繁杂的判断哪,难!
作者: 柳烟    时间: 2011-3-3 16:18

42# 榕坚
判断是有点多,我看到代码有点长,判断又多,吓了一跳。看了几遍,感觉只造第一个开关项,可除去代码中的好几段,也许能成,我算了一部分数据了,晚上再看看,能否整个样子,不过,实在没把握。
作者: 柳烟    时间: 2011-3-3 21:54

太困难了,已决定放弃了。




欢迎光临 inRm3D: 画板论坛 (http://inrm3d.cn/) Powered by Discuz! 7.0.0