返回列表 回复 发帖
25# changxde


这类分形最好把中间那个圆环去掉!
我感觉你是个爱思考的人!给你提一个研究课题怎么样?如何把IFS分形转化为扫描作法?就象谢氏图一样。用IFS作法用画板实现很简单,但用扫描法难度就大一点儿。
这个问题有两个关键点
1.如何限定局部点的坐标
2.如何建立局部与整体的仿射变换
交一份作业,扫一颗小松。
用扫描法很难达到ifs的效果。

松.JPG (11.6 KB)

松.JPG

松.gsp (9.57 KB)

这个转化有一定难度,这一段时间我在不停地思考这个问题。只要不懈地探索,我想解决只是迟早的问题!加油!我看了你发在论坛上的扫描法作的那些IFS效果图,思路很不错,只是算法还需要改进。比方说扫描谢氏图,你的算法不够简捷。你再思考一下,也许会有更好的算法。随后我们再交流!
看UF扫了这一个图,原来是牛顿新星

pic.jpg (131.09 KB)

pic.jpg

扫描框思考
1.直接用大坐标系扫描(前面的方法)
2.坐标系不变,用变换的方法,把局部变换到扫描窗口中。

新扫描框.gsp (12.92 KB)

我试了试此扫描框,不错。此扫描框挺新鲜,挺有意思,下载学习。问好常老师
37# changxde
全新的思路、全新的制作,堪称新概念扫描框。
感谢常老师给我们带来的又一个新奇。
此扫描框好象没有到软件中的直角坐标系,这就好,免得坐标系障眼。
用新扫描框,将UF中的一分形的所有数据,整个抬进这新扫描框,扫图:
未命名.jpg
将UF中的代码,用大刀阔斧砍掉后的精简代码作成,大家闲遐时可整整,颇有意思的。
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

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
  e1=  exp^(-cabs(z1))
  e2 =  exp^(-cabs(z2))
  e3 =  exp^(-cabs(z3))
  done = done + 1         ; increment iteration counter

  IF (modz > @bailout ||       \
      @everyiter ||            \
      done == 149 + 2)      ; done, or every iteration, or last
    ; determine continuous iteration (height) for each point
      vx = e2-e1
      vy = e3-e1
      vz = -@offset
      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 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
}
返回列表