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
Command: trap
a? 0.25
b? -0.17
c? 0.20
d? 0.30
k? 1
Iterazioni? 1000
Command: trap
a? 0.8
b? 0.2
c? 0.1
d? -0.1
k? 2
Iterazioni? 1000
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
Command: ico
a? 1.35
b? -0.9
c? 0
d? -0.8
Iterazioni? 1000
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
|