返回列表 回复 发帖
UF中科赫雪花的第二个开关项抽出后的代码如下:
KochCurve {
init:
  z = #pixel
  x = real(z)
  y = imag(z)
  sq3 = sqrt(3)
  bool bail2 = false
  bool bail = false
  i = 0
loop:
  i = i + 1
  if i == 2
    arg = atan2(z)
      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
      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

  elseif i > 2
    z = 3*z
    x = real(z)
    y = imag(z)
    if (y > 0) && (sq3*x - y + sq3 > 0) \
       && (sq3*x + y - sq3 < 0)
      bail2 = true
    endif
    z = z/3
    x = real(z)
    y = imag(z)
    if x < -1/3
      z = 3*z + 2
    elseif x > 1/3
      z = 3*z - 2
    elseif (x < 0)&&(x>-1/3)

        z = z + 1/3
        z = z*exp(-1i*pi/3)
        z = 3*z - 1
    elseif (x > 0)&&(x<1/3)
        z = z - 1/3
        z = z*exp(1i*pi/3)
        z = 3*z + 1
    endif
   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

}
第一个开关项的科氏雪花作出后,这第二个开关项,是顺理成章的事,估计难度不是很大了。
能将UF程序解读并用画板实现,是要有智慧和毅力的,非常钦佩柳老师的能力和钻劲。
38#的第二图不是第二个开关项吗?UF好象是三个开关项。
43# 榕坚
UF中共有三个开关项,已发表的几张科赫雪花图片均是第一个开关项,第二个开关项代码41楼,GSP版的,还未生产出。
有一个想法:如何象M集那样提取出它的边界?
45# 榕坚
扫描法搞边界,怕有些困难,MJ集边界成熟算法dem法,涉及导数,这科赫雪花好象找不到一个复函数,这导数没法办。
46# 柳烟


应该还是可以办到的,不一定要DEM法。
这第二个开关项,整出的不对劲,检查了一遍,没发现错误,算式多,眼睛都看花了,干脆重新整一遍,结果对头了。
Koch线,线条不是很清晰:
K.JPG
49# 榕坚
作得不错,这是用的什么办法弄出的边界呢
返回列表