返回列表 回复 发帖
UF中的另一特效:
作色程序:
TangentCircles {
; Mark Townsend, 29 Apr 1999
;
; ****** NOTE *******
; Instead of using this coloring method use
; the Tangent Balls mode of the Paul Carlson's
; Orbit Traps method in pwc.ucl.
; *******************
;
; Paul W. Carlson's Tangent Circles oribit trap
; method.
;
init:
  int iter = 0
  float x = 0
  float y = 0
  float Xabs = 0
  float Yabs = 0
  float Dsgd0 = 0
  float Dsgd1 = 0
  float Dsgd2 = 0
  float Circle = 0
  float ZtoPsqd = 0
  float Rc = @r
  float Phi = #pi * 0.125
  float Rm = Rc / sin(Phi)
  float RcSqd = Rc^2
  float Py = Rm * sin(2 * Phi)
  float Px = Rm * cos(2 * Phi)
  bool Trapped = false
loop:
  iter = iter + 1
  x = real(#z)
  y = imag(#z)
  if abs((cabs(#z) - Rm)) < Rc && iter > @skip && !Trapped
    Xabs = abs(x)
    Yabs = abs(Y)
    Dsgd0 = Xabs^2 + (Yabs - Rm)^2
    Dsgd1 = (Xabs - Px)^2 + (Yabs - Py)^2
    Dsgd2 = (Xabs - Rm)^2 + Yabs^2
    if Dsgd0 < RcSqd
      Trapped = true
      ZtoPsqd= Dsgd0
      if y > 0
        Circle = 0
      else
        Circle = 4
      endif
    elseif Dsgd1 < RcSqd
      Trapped = true
      ZtoPsqd= Dsgd1
      if y >  0&& x > 0
        Circle = 1
      elseif y < 0 && x > 0
        Circle = 3
      elseif y < 0 && x < 0
        Circle = 5
      else
        Circle = 7
      endif
    elseif Dsgd2 < RcSqd
      trapped = true
      ZtoPsqd = Dsgd2
      if x > 0
        Circle = 2
      else
        Circle = 6
      endif
   endif
endif
final:
  if !trapped
    #solid = true
  else
    Circle = (Circle + @off) % 8
    float Ratio = sqrt(ZtoPsqd/Rcsqd)
    float ColorIndex = 29 * Ratio + Circle * 30
    #index = (ColorIndex + 1) % 256 /256
  endif
default:
  title = "Carlson Tangent Circles"
  param r
    caption = "Circle radius"
    default = 0.2
  endparam
  param skip
    caption = "Iters to skip"
    default = 1
    hint = "Iterations to skip."
  endparam
  param off
    caption = "Hue cycle"
    default = 0
    min = 0
    max = 7
    hint = "This rotates the coloring order of the balls."
  endparam
}
感觉到程序不是太难,从UF的效果来看,类似作过的圆陷阱,我正在用画板整,感觉到可能要失败。大家想想办法。
Fractal1.jpg
61# 柳烟


UF代码中的#solid 是什么意思一直摸不透。
62# 榕坚
此句好象是调除M集肚内与众多圆陷阱外的颜色用的,我试了,此值若为true,则为黑,若为false,则为默认的天蓝色。我将
if !trapped
    #solid = true
  else
    Circle = (Circle + @off) % 8
    float Ratio = sqrt(ZtoPsqd/Rcsqd)
    float ColorIndex = 29 * Ratio + Circle * 30
    #index = (ColorIndex + 1) % 256 /256
中if后的!号去掉,并将#solid = true
  else
拿掉,变成这样:
if trapped

        Circle = (Circle + @off) % 8
    float Ratio = sqrt(ZtoPsqd/Rcsqd)
    float ColorIndex = 29 * Ratio + Circle * 30
    #index = (ColorIndex + 1) % 256 /256
在UF中试,结果影响不大。另外,将#solid改为任一变量,如a等等,不影响。
63# 柳烟


好象是如果trapped=1,按#index着色。否则调用UF的内部着色机制着色。也就是说落入陷井的点按#index着色。是这样理解的吗?
64# 榕坚
应该是这样理解的。我刚才乱整一通,整出了几个圈圈,有些相象。可能我的迭代有问题,好象是将着色程序中的x,y,也就是将M集的#z,可能是z0,替代x,y,让其与M集一同迭代。这我还没试。刚才乱整出的圈圈预言,这能用画板实现。
未命名.JPG
另外,从UF中看,那些圆圈被黑M集压住,应该是用dxy老师的M集外部q法用#index作色。
好象我已经做出来了,正在扫图:
未命名.JPG
扫了一个黑白的,白天再整一个彩色的。
调一彩色的。
未命名.jpg
未命名.jpg
Carlson Tangent Circles下M集.gsp (30.13 KB)
其实就是八圆陷井了,不同的是分别标注着色。

TangentCircles-7.JPG (78.02 KB)

TangentCircles-7.JPG

67# 柳烟


如何让每个圆的中心透亮使其更有立方体感?
69# 榕坚
可能有些麻烦,好象与原来造陷阱的算法不一样,不知有何更好的办法。
返回列表