What's the best way to auto-convert spaces to non-breaking spaces?
; Draw a sierpinski triangle
; Get all six coords of vertices of equilateral triangle
; with tip at (x1, y1) and side length 'side'
(define (triangle x1 y1 side)
(let ((x2 (- x1 (/ side 2)))
(x3 (+ x1 (/ side 2)))
(y2 (- y1 (/ (* (sqrt 3) side) 2)))
(y3 (- y1 (/ (* (sqrt 3) side) 2))))
(list x1 y1 x2 y2 x3 y3)))
(define (draw-triangle g x1 y1 side)
(let ((tri (triangle x1 y1 side)))
(graphics-draw-line g (first tri)
(second tri)
(third tri)
(fourth tri))
(graphics-draw-line g (first tri)
(second tri)
(fifth tri)
(sixth tri))
(graphics-draw-line g (third tri)
(fourth tri)
(fifth tri)
(sixth tri))))
; Level-zero Sierpinski triangle is just a triangle
; Level-n triangle is three copies of level (n-1) triangle
(define (sier g n x1 y1 side)
(if (= n 0)
(draw-triangle g x1 y1 side)
(let ((tri (triangle x1 y1 (/ side 2))))
(sier g (- n 1) (first tri) (second tri) (/ side 2))
(sier g (- n 1) (third tri) (fourth tri) (/ side 2))
(sier g (- n 1) (fifth tri) (sixth tri) (/ side 2)))))
(define (new-sier g n x1 y1 side)
(graphics-clear g)
(sier g n x1 y1 side))
(define g (make-graphics-device 'win32 1000 1000))
;Call it like this:
(define side 2)
(new-sier g 6 0 (/ (* side (sqrt 3)) 4) side)
No comments:
Post a Comment