Lisp »Tips 'n Tricks
»QJS
»1
»2
QJ2
Come QJ1 ma a colori...
;|
QJ2.LSP (C)2005 by Claudio Piccini
www.cg-cad.com
Quaternion Julia Sets 2D
|;
(defun qJs2 ( / m n i
a b c d
t0 t1 t2 t3
l colore
)
(setq m 0)
(while (< m dim)
(setq n 0)
(while (< n dim)
(cond
((= tipoP 1) ; [a b] c d
(setq a k1)
(setq b k1)
(setq c (+ -2 (/ (* m 4.0) dim)))
(setq d (+ -2 (/ (* n 4.0) dim)))
)
((= tipoP 2) ; [a] b [c] d
(setq a k1)
(setq b (+ -2 (/ (* m 4.0) dim)))
(setq c k1)
(setq d (+ -2 (/ (* n 4.0) dim)))
)
((= tipoP 3) ; [a] b c [d]
(setq a k1)
(setq b (+ -2 (/ (* m 4.0) dim)))
(setq c (+ -2 (/ (* n 4.0) dim)))
(setq d k1)
)
((= tipoP 4) ; a [b c] d
(setq a (+ -2 (/ (* m 4.0) dim)))
(setq b k1)
(setq c k1)
(setq d (+ -2 (/ (* n 4.0) dim)))
)
((= tipoP 5) ; a [b] c [d]
(setq a (+ -2 (/ (* m 4.0) dim)))
(setq b k1)
(setq c (+ -2 (/ (* n 4.0) dim)))
(setq d k1)
)
((= tipoP 6) ; a b [c d]
(setq a (+ -2 (/ (* m 4.0) dim)))
(setq b (+ -2 (/ (* n 4.0) dim)))
(setq c k1)
(setq d k1)
)
)
(setq i 0)
(setq colore 0)
(while (< i steps)
(setq i (1+ i))
(setq colore (1+ colore))
(setq t0 (+ (- (* a a)(* b b)(* c c)(* d d)) cR))
(setq t1 (+ (* 2 a b) cI))
(setq t2 (+ (* 2 a c) cJ))
(setq t3 (+ (* 2 a d) cK))
(setq a t0 b t1 c t2 d t3)
(setq l (+ (* a a)(* b b)(* c c)(* d d)))
(if (> l 2)(setq i steps))
)
(if (< l 2)
(progn
(command "_color" 7)
(command "_point" (list (+ m (car p0))(+ n (cadr p0))))
)
(progn
(if (OR (>= colore 250)(= colore 0))(setq colore 1))
(command "_color" colore)
(command "_point" (list (+ m (car p0))(+ n (cadr p0))))
)
)
(setq n (1+ n))
)
(setq m (1+ m))
)
)
(defun c:qj2 ( / snapp
steps dim p0 K
cR cI cJ cK
tipoP k1
)
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(princ "\nJulia di Q^2+q (Q=a0+a1+a2+a3, q=cR+cI+cJ+cK).")
;|
Selezione delle coppie di parametri costanti di Q:
1) [a b] c d
2) [a] b [c] d
3) [a] b c [d]
4) a [b c] d
5) a [b] c [d]
6) a b [c d]
|;
(setq K 1)
(while K
(setq tipoP (getint "\nSelezione coppia parametri costanti di Q (1-6):"))
(if (AND (> tipoP 0)(<= tipoP 6))(setq K nil))
)
(setq k1 (getreal "\nValore parametro costante di Q [0.05]: "))
(if (= k1 nil)(setq k1 0.05))
(princ "\nValore parametri costante q=cR+cI+cJ+cK")
(setq cR (getreal "\ncR [-0.745]: "))
(if (= cR nil)(setq cR -0.745))
(setq cI (getreal "\ncI [0.113]: "))
(if (= cI nil)(setq cI 0.113))
(setq cJ (getreal "\ncJ [0.01]: "))
(if (= cJ nil)(setq cJ 0.01))
(setq cK (getreal "\ncK [0.01]: "))
(if (= cK nil)(setq cK 0.01))
(initget (+ 2 4)) ; non 0 non negativo
(setq steps (getint "\nSteps [100]: "))
(if (= steps nil)(setq steps 100))
(initget (+ 2 4)) ; non 0 non negativo
(setq dim (getint "\nDimensione griglia frattale [200]: "))
(if (= dim nil)(setq dim 200))
(setq p0 (getpoint "\nSeleziona un punto del disegno..."))
(qJs2)
(command "_color" "BYLAYER")
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
Command: qj2
Julia di Q^2+q (Q=a0+a1+a2+a3, q=cR+cI+cJ+cK).
Selezione coppia parametri costanti di Q (1-6):6
Valore parametro costante di Q [0.05]: Invio
Valore parametri costante q=cR+cI+cJ+cK
cR [-0.745]: Invio
cI [0.113]: Invio
cJ [0.01]: Invio
cK [0.01]: Invio
Steps [100]: Invio
Dimensione griglia frattale [200]: 400
Seleziona un punto del disegno...
Il colore permette di vedere insiemi di Julia non connessi (polvere frattale) invisibili con QJ1...
Command: qj2
Julia di Q^2+q (Q=a0+a1+a2+a3, q=cR+cI+cJ+cK).
Selezione coppia parametri costanti di Q (1-6):5
Valore parametro costante di Q [0.05]: Invio
Valore parametri costante q=cR+cI+cJ+cK
cR [-0.745]: 0.5
cI [0.113]: 0.4
cJ [0.01]: 1
cK [0.01]: 0.05
Steps [100]: 200
Dimensione griglia frattale [200]: Invio
Seleziona un punto del disegno...
QJ3
Il Lisp calcola il logaritmo della variabile colore per fissare il colore *
;|
QJ3.LSP (C)2005 by Claudio Piccini
www.cg-cad.com
Quaternion Julia Sets 2D
|;
(defun qJs3 ( / m n i
a b c d
t0 t1 t2 t3
l colore
)
(setq m 0)
(while (< m dim)
(setq n 0)
(while (< n dim)
(cond
((= tipoP 1) ; [a b] c d
(setq a k1)
(setq b k1)
(setq c (+ -2 (/ (* m 4.0) dim)))
(setq d (+ -2 (/ (* n 4.0) dim)))
)
((= tipoP 2) ; [a] b [c] d
(setq a k1)
(setq b (+ -2 (/ (* m 4.0) dim)))
(setq c k1)
(setq d (+ -2 (/ (* n 4.0) dim)))
)
((= tipoP 3) ; [a] b c [d]
(setq a k1)
(setq b (+ -2 (/ (* m 4.0) dim)))
(setq c (+ -2 (/ (* n 4.0) dim)))
(setq d k1)
)
((= tipoP 4) ; a [b c] d
(setq a (+ -2 (/ (* m 4.0) dim)))
(setq b k1)
(setq c k1)
(setq d (+ -2 (/ (* n 4.0) dim)))
)
((= tipoP 5) ; a [b] c [d]
(setq a (+ -2 (/ (* m 4.0) dim)))
(setq b k1)
(setq c (+ -2 (/ (* n 4.0) dim)))
(setq d k1)
)
((= tipoP 6) ; a b [c d]
(setq a (+ -2 (/ (* m 4.0) dim)))
(setq b (+ -2 (/ (* n 4.0) dim)))
(setq c k1)
(setq d k1)
)
)
(setq i 0)
(setq colore 0)
(while (< i steps)
(setq i (1+ i))
(setq colore (1+ colore))
(setq t0 (+ (- (* a a)(* b b)(* c c)(* d d)) cR))
(setq t1 (+ (* 2 a b) cI))
(setq t2 (+ (* 2 a c) cJ))
(setq t3 (+ (* 2 a d) cK))
(setq a t0 b t1 c t2 d t3)
(setq l (+ (* a a)(* b b)(* c c)(* d d)))
(if (> l 2)(setq i steps))
)
(if (< l 2)
(progn
(command "_color" 7)
(command "_point" (list (+ m (car p0))(+ n (cadr p0))))
)
(progn
(if (OR (>= colore 250)(= colore 0))(setq colore 1))
(setq colore (log colore))
(setq colore (atoi (rtos colore 2 0)))
(if (= colore 0)(setq colore 1))
(command "_color" colore)
(command "_point" (list (+ m (car p0))(+ n (cadr p0))))
)
)
(setq n (1+ n))
)
(setq m (1+ m))
)
)
(defun c:qj3 ( / snapp
steps dim p0 K
cR cI cJ cK
tipoP k1
)
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(princ "\nJulia di Q^2+q (Q=a0+a1+a2+a3, q=cR+cI+cJ+cK).")
;|
Selezione delle coppie di parametri costanti di Q:
1) [a b] c d
2) [a] b [c] d
3) [a] b c [d]
4) a [b c] d
5) a [b] c [d]
6) a b [c d]
|;
(setq K 1)
(while K
(setq tipoP (getint "\nSelezione coppia parametri costanti di Q (1-6):"))
(if (AND (> tipoP 0)(<= tipoP 6))(setq K nil))
)
(setq k1 (getreal "\nValore parametro costante di Q [0.05]: "))
(if (= k1 nil)(setq k1 0.05))
(princ "\nValore parametri costante q=cR+cI+cJ+cK")
(setq cR (getreal "\ncR [-0.745]: "))
(if (= cR nil)(setq cR -0.745))
(setq cI (getreal "\ncI [0.113]: "))
(if (= cI nil)(setq cI 0.113))
(setq cJ (getreal "\ncJ [0.01]: "))
(if (= cJ nil)(setq cJ 0.01))
(setq cK (getreal "\ncK [0.01]: "))
(if (= cK nil)(setq cK 0.01))
(initget (+ 2 4)) ; non 0 non negativo
(setq steps (getint "\nSteps [100]: "))
(if (= steps nil)(setq steps 100))
(initget (+ 2 4)) ; non 0 non negativo
(setq dim (getint "\nDimensione griglia frattale [200]: "))
(if (= dim nil)(setq dim 200))
(setq p0 (getpoint "\nSeleziona un punto del disegno..."))
(qJs3)
(command "_color" "BYLAYER")
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Analisi del Lisp
(setq colore (log colore))
(setq colore (atoi (rtos colore 2 0)))
(if (= colore 0)(setq colore 1))
(setq c (log 100))
->4.60517
(atoi (rtos c 2 0))
->5 = blu
Test del Lisp
Command: qj3
Julia di Q^2+q (Q=a0+a1+a2+a3, q=cR+cI+cJ+cK).
Selezione coppia parametri costanti di Q (1-6):6
Valore parametro costante di Q [0.05]: Invio
Valore parametri costante q=cR+cI+cJ+cK
cR [-0.745]: Invio
cI [0.113]: Invio
cJ [0.01]: Invio
cK [0.01]: Invio
Steps [100]: Invio
Dimensione griglia frattale [200]: 300
Seleziona un punto del disegno...
Polvere frattale...
Command: qj3
Julia di Q^2+q (Q=a0+a1+a2+a3, q=cR+cI+cJ+cK).
Selezione coppia parametri costanti di Q (1-6):5
Valore parametro costante di Q [0.05]: Invio
Valore parametri costante q=cR+cI+cJ+cK
cR [-0.745]: 0.5
cI [0.113]: 0.4
cJ [0.01]: 1
cK [0.01]: 0.05
Steps [100]: Invio
Dimensione griglia frattale [200]: 300
Seleziona un punto del disegno...
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 18 Maggio 2005
|