fortran66のブログ

fortran について書きます。

昔よくみた dragon 曲線。
C言語による 最新 アルゴリズム事典』からの移植。


PROGRAM dragon_curve
USE plotter
IMPLICIT NONE
INTEGER, PARAMETER :: norder = 10, iright = 1, ileft = 2
INTEGER :: i, k, ip, iq
INTEGER :: ifold(0:2**norder)
REAL    :: dx, dy, dx1, dy1
CALL gr_on('dragon curve', 640, 400)
CALL gr_axis(0.0, 640.0, 0.0, 400.0)
CALL move(200.0, 140.0)
dx = 0.0
dy = 2.0
CALL draw_rel(3.0 * dx, 3.0 * dy)
ip = 0
DO k = 1, norder
 ifold(ip) = ileft
 iq = 2 * ip
 DO i = ip, iq
  SELECT CASE (ifold(iq - i))
   CASE (iright)
    ifold(i) = ileft
    dx1 = -dy
    dy1 =  dx
   CASE (ileft)
    ifold(i) = iright
    dx1 =  dy
    dy1 = -dx
   CASE DEFAULT
    STOP 'error :: dragon_curve '
  END SELECT
  CALL draw_rel(dx + dx1, dy + dy1)
  CALL draw_rel(3.0 * dx1, 3.0 * dy1)
  dx = dx1
  dy = dy1
 END DO
 ip = iq + 1
END DO
CALL gr_off()
STOP
END PROGRAM dragon_curve