Fallstar

Untitled

Dec 14th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 4.05 KB | None | 0 0
  1. (defclass $circle ()
  2.     (($center :accessor center :initarg :center :type $point)
  3.     ($radius :accessor radius :initarg :radius)
  4.     )
  5. )
  6.  
  7. (defclass $square ()
  8.     (($corner :accessor corner :initarg :corner :type $point)
  9.     ($w :accessor w :initarg :w)
  10.     )
  11. )
  12.  
  13. (defclass $rectangle ()
  14.     (($corner :accessor corner :initarg :corner :type $point)
  15.     ($w :accessor w :initarg :w)
  16.     ($h :accessor h :initarg :h)
  17.     )
  18. )
  19.  
  20. (defclass $triangle ()
  21.     (($M1 :accessor M1 :initarg :M1 :type $point)
  22.     ($M2 :accessor M2 :initarg :M2 :type $point)
  23.     ($M3 :accessor M3 :initarg :M3 :type $point)
  24.     )
  25. )
  26.  
  27. (defclass $polygon ()
  28.     (($summitList :accessor summitList :initarg :summitList)
  29.     )
  30. )
  31.  
  32. (defclass $point ()
  33.     (($x :accessor x :initarg :x :type float)
  34.     ($y :accessor y :initarg :y :type float)
  35.     )
  36. )
  37.  
  38.  
  39.  
  40.  
  41.  
  42. ; Methods for points
  43.  
  44. defmethod =translate ((pt $point) dx dy)
  45.     (setf (x pt) (+ (x pt) dx))
  46.     (setf (y pt) (+ (y pt) dy))
  47. )
  48.  
  49. (defmethod =symx ((pt $point))
  50.     (setf (x pt) (- 0 (x pt)))
  51. )
  52.  
  53. (defmethod =symy ((pt $point))
  54.     (setf (y pt) (- 0 (y pt)))
  55. )
  56.  
  57. (defmethod =symo ((pt $point))
  58.     (=symx (x pt))
  59.     (=symy (y pt))
  60. )
  61.  
  62. defmethod =duplicate ((pt $point) dx dy)
  63.     (make-point (+ (x pt) dx) (+ (y pt) dy))
  64. )
  65.  
  66. ; Methods for triangle
  67.  
  68. (defmethod =translateTri ((tr $triangle) dx dy)
  69.     (=translate (M1 tr) dx dy)
  70.     (=translate (M2 tr) dx dy)
  71.     (=translate (M3 tr) dx dy)
  72. )
  73.  
  74. (defmethod =symxTri ((tr $triangle))
  75.     (=symx (M1 tr))
  76.     (=symx (M2 tr))
  77.     (=symx (M3 tr))
  78. )
  79.  
  80. (defmethod =symyTri ((tr $triangle))
  81.     (=symy (M1 tr))
  82.     (=symy (M2 tr))
  83.     (=symy (M3 tr))
  84. )
  85.  
  86. (defmethod =symoTri ((tr $triangle))
  87.     (=symo (M1 tr))
  88.     (=symo (M2 tr))
  89.     (=symo (M3 tr))
  90. )
  91.  
  92. (defmethod =duplicateTri ((tr $triangle) dx dy)
  93.     (make-triangle (+ (x (M1 tr)) dx) (+ (y (M1 tr)) dy) (+ (x (M2 tr)) dx)
  94. (+ (y (M2 tr)) dy) (+ (x (M3 tr)) dx) (+ (y (M3 tr)) dy))
  95. )
  96.  
  97. ; Methods for square
  98.  
  99. (defmethod =translateSq ((sq $square) dx dy)
  100.     (=translate (M sq) dx dy)
  101. )
  102.  
  103. (defmethod =symxSq ((sq $square))
  104.     (=symx (M sq))
  105.     (=translate (M sq) (- 0 (w ca)) 0)
  106. )
  107.  
  108. (defmethod =symySq ((sq $square))
  109.     (=symy (M sq))
  110.     (=translate (M sq) 0 (- 0 (w sq)))
  111. )
  112.  
  113. (defmethod =symoSq ((sq $square))
  114.     (=symo (M sq))
  115.     (=translate (M sq) (- 0 (w sq)) (- 0 (w sq)))
  116. )
  117.  
  118. (defmethod =duplicateSq ((sq $square) dx dy)
  119.     (make-carre (+ (X (M sq)) dx) (+ (Y (M sq)) dy) (w sq))
  120. )
  121.  
  122. ; Methods for rectangle
  123.  
  124. (defmethod =translateRec ((rec $rectangle) dx dy)
  125.     (=translate (M rec) dx dy)
  126. )
  127.  
  128. (defmethod =symxRec ((rec $rectangle))
  129.     (=symx (M rec))
  130.     (=translate (M rec) (- 0 (w rec)) 0)
  131. )
  132.  
  133. (defmethod =symyRec ((rec $rectangle))
  134.     (=symy (M rec))
  135.     (=translate (M ca) 0 (- 0 (w rec)))
  136. )
  137.  
  138. (defmethod =symoRec ((rec $rectangle))
  139.     (=symo (M rec))
  140.     (=translate (M ca) (- 0 (w rec)) (- 0 (h rec)))
  141. )
  142.  
  143. (defmethod =duplicateRec ((rec $rectangle) dx dy)
  144.     (make-rectangle (+ (X (M rec)) dx) (+ (Y (M rec)) dy) (w rec) (h rec))
  145. )
  146. ; Methods for circle
  147.  
  148. (defmethod =translateCir ((ci $circle) dx dy)
  149.     (=translate (C ci) dx dy)
  150. )
  151.  
  152. (defmethod =symxCir ((ci $circle))
  153.     (=symx (C ci))
  154. )
  155.  
  156. (defmethod =symyCi ((ci $cercle))
  157.     (=symy (C ci))
  158. )
  159.  
  160. (defmethod =symo ((ci $circle))
  161.     (=symo (C ci))
  162. )
  163.  
  164. (defmethod =duplicateCi ((ci $circle) dx dy)
  165.     (make-cercle (+ (X (C ci)) dx) (+ (Y (C ci)) dy) (r ci))
  166. )
  167. ; Methods for polygon
  168.  
  169. (defmethod =translatePol ((poly $polygon) dx dy)
  170.     (dolist (s (summitList poly))
  171.         (=translate s dx dy)
  172.     )
  173. )
  174.  
  175. (defmethod =symxPol ((poly $polygon))
  176.     (dolist (s (summitList poly))
  177.         (=symx s)
  178.     )
  179. )
  180.  
  181. (defmethod =symyPol ((poly $polygone))
  182.     (dolist (s (summitList poly))
  183.         (=symy s)
  184.     )
  185. )
  186.  
  187. (defmethod =symoPol ((poly $polygone))
  188.     (dolist (s (summitList poly))
  189.         (=symo s)
  190.     )
  191. )
  192.  
  193. (defmethod =duplicatePol ((poly $polygone) dx dy)
  194.     (let (pts)
  195.         (dolist (pt (summitList poly))
  196.             (push (make-point (+ (car pt) dx) (+ (cadr pt) dy)) pts)
  197.         )
  198.         (make-polygone (reverse ptsUpdate))
  199.     )
  200. )
Advertisement
Add Comment
Please, Sign In to add comment