cg-Cad

Lisp »Tips 'n Tricks »Simmetrie »1 »2 »3 »4 »5 »6 »7

TRAP

;;;
;;;  TRAP.lsp - 29 Aprile 2004
;;;  (C) 2004 by Claudio Piccini.
;;;  www.cg-cad.com
;;;    
;;;  Programma per disegnare tassellature
;;;
;;;  Implementazione dell'algoritmo 2.1 di
:::  "Terribili simmetrie" I.Stewart, M.Golubitsky
;;;

(defun c:trap ( / snapp a b c d k
                  i m n itera
                  x y x1 y1
 )
 (setvar "cmdecho" 0)
 (setq snapp (getvar "osmode"))
 (command "_osnap" "_non")
 (setq a (getreal "\na? "))
 (setq b (getreal "\nb? "))
 (setq c (getreal "\nc? "))
 (setq d (getreal "\nd? "))
 (setq k (getint "\nk? "))
 (while
  (progn
   (setq itera (getint "\nIterazioni? "))
   (if (> itera 50) nil T)
  )
 )
 (setq x 0.1 y 0.3)
 (setq i 0)
 (while (<= i itera)
  (setq x1 (+
             (* a (sin (* 2 pi x)))
             (* b (sin (* 2 pi x))(cos (* 2 pi y)))
             (* c (sin (* 4 pi x)))
             (* d (sin (* 6 pi x))(cos (* 4 pi y)))
             (* k x)
            )
  )
  (if (>= x 0)
   (setq x1 (- x1 (fix x1)))
   (setq x1 (+ (- x1 (fix x1)) 1))
  )
  (setq y1 (+
             (* a (sin (* 2 pi y)))
             (* b (sin (* 2 pi y))(cos (* 2 pi x)))
             (* c (sin (* 4 pi y)))
             (* d (sin (* 6 pi y))(cos (* 4 pi x)))
             (* k y)
            )
  )
  (if (>= y 0)
   (setq y1 (- y1 (fix y1)))
   (setq y1 (+ (- y1 (fix y1)) 1))
  )
  (setq x x1 y y1)
  ;|
    50 iterazioni solo per scartare
    i primi valori non significativi
  |;
  (if (> i 50)
   (progn
    (setq m 0)
    (while (<= m 3)
     (setq n 0)
     (while (<= n 3)
      (command "_point" (list (+ x m)(+ y n)))
      (setq n (1+ n))
     )
     (setq m (1+ m))
    )
   )
  )
  (setq i (1+ i))
 )
 (setvar "osmode" snapp)
 (command "_redraw")
 (setvar "cmdecho" 1)
 (princ)
)
;;;eof

Test del lisp

Command: trap
a? -0.59
b? 0.20
c? 0.10
d? 0
k? 0
iterazioni? 2000

TRAP.LSP

Command: trap
a? 0.25
b? -0.17
c? 0.20
d? 0.30
k? 1
Iterazioni? 1000

TRAP.LSP

Command: trap
a? 0.8
b? 0.2
c? 0.1
d? -0.1
k? 2
Iterazioni? 1000

TRAP.LSP

ICO

;;;
;;;  ICO.lsp - 29 Aprile 2004
;;;  (C) 2004 by Claudio Piccini.
;;;  www.cg-cad.com
;;;    
;;;  Programma per disegnare icone
;;;  simmetriche nel piano.
;;;  Implementazione dell'algoritmo 1.0 di
:::  "Terribili simmetrie" I.Stewart, M.Golubitsky
;;;

(defun c:ico ( / snapp a b c d
                  i m n itera
                  x y x1 y1
 )
 (setvar "cmdecho" 0)
 (setq snapp (getvar "osmode"))
 (command "_osnap" "_non")
 (setq a (getreal "\na? "))
 (setq b (getreal "\nb? "))
 (setq c (getreal "\nc? "))
 (setq d (getreal "\nd? "))
 (while
  (progn
   (setq itera (getint "\nIterazioni? "))
   (if (> itera 50) nil T)
  )
 )
 (setq x 0.1 y 0.3)
 (setq i 0)
 (while (<= i itera)
  (setq x1 (+
             (* a x)
             (* b x (+ (* x x)(* y y)))
             (* c x (- (* x x x)(* 3 x y y)))
             (* d (- (* x x)(* y y)))
            )
  )
  (if (>= x 0)
   (setq x1 (- x1 (fix x1)))
   (setq x1 (+ (- x1 (fix x1)) 1))
  )
  (setq y1 (+
             (* a y)
             (* b y (+ (* x x)(* y y)))
             (* c y (- (* 3 x x y)(* y y y)))
             (* d (- (* 2 x y)))
            )
  )
  (if (>= y 0)
   (setq y1 (- y1 (fix y1)))
   (setq y1 (+ (- y1 (fix y1)) 1))
  )
  (setq x x1 y y1)
  ;|
    50 iterazioni solo per scartare
    i primi valori non significativi
  |;
  (if (> i 50)
   (progn
    (setq m 0)
    (while (<= m 3)
     (setq n 0)
     (while (<= n 3)
      (command "_point" (list (+ x m)(+ y n)))
      (setq n (1+ n))
     )
     (setq m (1+ m))
    )
   )
  )
  (setq i (1+ i))
 )
 (setvar "osmode" snapp)
 (command "_redraw")
 (setvar "cmdecho" 1)
 (princ)
)
;;;eof

Test del lisp

Command: ico
a? 1.89
b? -1.10
c? 0.17
d? -0.79
Iterazioni? 1000

ICO.LSP

Command: ico
a? 1.35
b? -0.9
c? 0
d? -0.8
Iterazioni? 1000

ICO.LSP

Per approfondire:
H. Weyl. La simmetria, Editore Feltrinelli (1975)
I. Stewart, M. Golubitsky. Terribili simmetrie (Dio è un geometra?), Editore Boringhieri (1995)

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 29 Aprile 2004