cg-Cad

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

LRNZ3

Due lisp per disegnare l'attrattore strano di Lorenz (e l'effetto farfalla) usando al posto del comando "punto" l'entità linea.

;|

   LRNZ3.LSP (C) 2005 by Claudio Piccini.
   www.cg-cad.com

   Attrattore strano di Lorenz
   dx/dt=-ax+ay
   dy/dt=b*x-y-z*x
   dz/dt=-cz+xy

|;

(defun lorenz3 ( / steps    ; iterazioni
                   a b c    ; costanti
                   dt       ; step temporale
                   x y z 
                   xx yy zz
                   i p0 
 )

 (setq x  1 
       y  1 
       z  1 
       dt 0.02
 )
 (setq a (getreal "\n a? [5] "))
 (if (= a nil)(setq a 5))
 (setq b (getreal "\n b? [15] "))
 (if (= b nil)(setq b 15))
 (setq c (getreal "\n c? [1] "))
 (if (= c nil)(setq c 1))
 (setq steps (getint "\n steps? [10000] "))
 (if (= steps nil)(setq steps 10000))
 (setq p0 (getpoint "\ clicca un punto nel disegno..."))
 (setq i 0)
 (while (<= i steps)
  (setq xx (+ (- x (* a x dt))(* a y dt)))
  (setq yy (- (+ y (* b x dt))(* y dt)(* z x dt)))
  (setq zz (+ (- z (* c z dt))(* x y dt)))
  (command "_line"
   (list (+ x (car p0))(+ y (cadr p0)) z)
   (list (+ xx (car p0))(+ yy (cadr p0)) zz)
   ""
  )
  (setq x xx)
  (setq y yy)
  (setq z zz)
  (setq i (1+ i))
 )
)

(defun c:lrnz3 ( / snapp )
 (setvar "cmdecho" 0)
 (setq snapp (getvar "osmode"))
 (command "_osnap" "_non")
 (lorenz3)
 (setvar "osmode" snapp)
 (command "_redraw")
 (setvar "cmdecho" 1)
 (princ)
)
;;;eof

Test del lisp

Command: lrnz3
a? [5] Invio
b? [15] Invio
c? [1] Invio
steps? [10000] Invio
clicca un punto nel disegno...

LRNZ3.LSP

LRNZ4

;|

   LRNZ4.LSP (C) 2005 by Claudio Piccini.
   www.cg-cad.com

   Disegna 2 attrattori strani di Lorenz
   per simulare l'effetto farfalla

|;

(defun lorenz4 ( / steps                ; iterazioni
                   a b c                ; costanti
                   dt                   ; step temporale
                   x y z xx yy zz       ; 1 attrattore
                   x1 y1 z1 xx1 yy1 zz1 ; 2 attrattore
                   i p0 

 )
 (setq x  1.0000000
       y  1.0000000
       z  1.0000000
       x1 1.0000001
       y1 1.0000001
       z1 1.0000001
       dt 0.02
 )
 (setq a (getreal "\n a? [5] "))
 (if (= a nil)(setq a 5))
 (setq b (getreal "\n b? [15] "))
 (if (= b nil)(setq b 15))
 (setq c (getreal "\n c? [1] "))
 (if (= c nil)(setq c 1))
 (setq steps (getint "\n steps? [10000] "))
 (if (= steps nil)(setq steps 10000))
 (setq p0 (getpoint "\ clicca un punto nel disegno..."))
 (setq i 0)
 (while (<= i steps)
  ;|
     disegna il primo attrattore
     in rosso
  |;
  (command "_color" 1)
  (setq xx (+ (- x (* a x dt))(* a y dt)))
  (setq yy (- (+ y (* b x dt))(* y dt)(* z x dt)))
  (setq zz (+ (- z (* c z dt))(* x y dt)))
  (command "_line"
   (list (+ x (car p0))(+ y (cadr p0)) z)
   (list (+ xx (car p0))(+ yy (cadr p0)) zz)
   ""
  )
  (setq x xx)
  (setq y yy)
  (setq z zz)
  ;|
     disegna il secondo attrattore
     in blu
  |;
  (command "_color" 5)
  (setq xx1 (+ (- x1 (* a x1 dt))(* a y1 dt)))
  (setq yy1 (- (+ y1 (* b x1 dt))(* y1 dt)(* z1 x1 dt)))
  (setq zz1 (+ (- z1 (* c z1 dt))(* x1 y1 dt)))
  (command "_line"
   (list (+ x1 (car p0))(+ y1 (cadr p0)) z1)
   (list (+ xx1 (car p0))(+ yy1 (cadr p0)) zz1)
   ""
  )
  (setq x1 xx1)
  (setq y1 yy1)
  (setq z1 zz1)
  (setq i (1+ i))
 )
)

(defun c:lrnz4 ( / snapp )
 (setvar "cmdecho" 0)
 (setq snapp (getvar "osmode"))
 (command "_osnap" "_non")
 (lorenz4)
 (setvar "osmode" snapp)
 (command "_redraw")
 (setvar "cecolor" "BYLAYER")
 (setvar "cmdecho" 1)
 (princ)
)
;;;eof

Test del lisp

Command: lrnz4
a? [5] Invio
b? [15] Invio
c? [1] Invio
steps? [10000] Invio
clicca un punto nel disegno...

LRNZ4.LSP
Particolare

Command: lrnz4
a? [5] Invio
b? [15] Invio
c? [1] 3.5
steps? [10000] Invio
clicca un punto nel disegno...

LRNZ4.LSP

Command: lrnz4
a? [5] 3.5
b? [15] 10
c? [1] 3
steps? [10000] Invio
clicca un punto nel disegno...
...
Zero length line created at (237.0886, 98.7996, 9.0000)
; error: Function cancelled
Specify next point or [Undo]: *Cancel*

LRNZ4.LSP

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 25 Aprile 2005