stevenp

Untitled

Oct 26th, 2011
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.23 KB | None | 0 0
  1. (defun split (P1 P2 P3)
  2. (list (list P1
  3.         (list (/ (+ (car P1) (car P2)) 2) (/ (+ (cadr P1) (cadr P2)) 2))
  4.         (list (/ (+ (car P1) (car P3)) 2) (/ (+ (cadr P1) (cadr P3)) 2)))
  5.       (list (list (/ (+ (car P1) (car P2)) 2) (/ (+ (cadr P1) (cadr P2)) 2))
  6.         P2
  7.         (list (/ (+ (car P2) (car P3)) 2) (/ (+ (cadr P2) (cadr P3)) 2)))
  8.       (list (list (/ (+ (car P1) (car P3)) 2) (/ (+ (cadr P1) (cadr P3)) 2))
  9.         (list (/ (+ (car P2) (car P3)) 2) (/ (+ (cadr P2) (cadr P3)) 2))
  10.         P3)))
  11.  
  12. (defun calc (dreieck tiefe)
  13. (cond ((= 0 tiefe) dreieck)
  14.       (t (calc (loop for i in dreieck append (apply 'split i)) (- tiefe 1)))))
  15.  
  16. (defun draw_triangle (P1 P2 P3)
  17. (format nil "~%<polygon points=\"~,30f,~,30f ~,30f,~,30f ~,30f,~,30f\" fill=\"#000000\"/>"
  18.         (car P1) (cadr P1)
  19.         (car P2) (cadr P2)
  20.         (car P3) (cadr P3)))
  21.  
  22. (defun paint (L)
  23. (loop for i in L collect (apply 'draw_triangle i)))
  24.  
  25. (defun build (name X Y dim)
  26. (with-open-file (svg name :if-exists :supersede :direction :output)
  27. (format svg "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"~Apx\" height=\"~Apx\">" X Y)
  28. (format svg "~{~A~}" (paint (calc `(((5 ,(- Y 5)) (,(/ X 2) 5) (,(- X 5) ,(- Y 5)))) dim)))
  29. (format svg "~%</svg>")))
  30.  
  31. (build "bild.svg" 1024 768 12)
  32.  
Advertisement
Add Comment
Please, Sign In to add comment