如何在计划中绘制递归六边形艺术?

时间:2013-08-09 10:22:21

标签: scheme turtle-graphics

enter image description here 如果我们想在如上所述的方案中绘制递归艺术,我们应该如何处理呢?

以下是我在方案中从sierpinski三角编辑的粗略草稿(目前尚未完成的工作)。

谢谢!

(define (hax fn)
    (repeat 6 (lambda () (fn) (lt 60))))

(define (haxa d k)
    (hax (lambda ()
            (if (= k 1) (fd d) (haxaleg d k)))))

(define (haxaleg d k)
    (haxa (/ d 2) (- k 1))
    (penup)
    (fd (* d 1.72))
    (lt 120)
    (pendown))

1 个答案:

答案 0 :(得分:3)

由于您似乎希望在六边形周围的每个第二个角落递归绘制较小的六边形,因此以下方法可以正常工作。

  1. 绘制所需尺寸的六边形,返回原始位置和方向
  2. 在当前位置绘制较小的六边形
  3. 向前移动两侧,每次移动后转动
  4. 重复第2点和第3点两次
  5. 在你的方案方言中,这应该是

    (define (hexagon length)
        (pendown)
        (repeat 6 (lambda () 
                     (fd length)
                     (lt 60)))
        (penup))
    
    (define (hexagons length levels)
        (hexagon length)   ;; Draw big hexagon
        (if (> levels 1)
            (repeat 3 (lambda ()
                         (hexagons (/ length 2) (- levels 1))  ;; Then smaller ones,
                         (repeat 2 (lambda ()                  ;; move to next corner
                              (fd length)
                              (lt 60)))))))