| 
 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 |