cg-Cad

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

QJ2

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

QJ2

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

QJ3

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

QJ3

Q=0.07

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 18 Maggio 2005