Lisp »Tips 'n Tricks
»Algoritmo della polvere
L'algoritmo è il seguente:
K=numero casuale ]0-1[
a=3.14159
while i<=numero_cicli
repeat numero_punti
x=K*cos(a+K)+K*sin(a+K)
y=K*cos(a+K)-K*sin(a+K)
Point(x,y)
a=a+0.5
i=i+1
end;
end;
|
PLV
;|
plv.lsp (C) 2005 by Claudio Piccini.
www.cg-cad.com
|;
;|
Genera un numero reale casuale compreso tra 0 e 1
Vedi il tutorial n.37 "Numeri casuali"
in AutoLISP Tips & Tricks Volume I
|;
(defun rn ( / m b c )
(if (not sd)(setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(* (/ sd m) 2)
)
(defun polvere ( / i a np nc p0 p1 )
(setq i 0
a pi
)
(initget (+ 2 4)) ; numero>0
(setq np (getint "\n numero punti [100]: "))
(if (= np nil)(setq np 100))
(initget (+ 2 4)) ; numero>0
(setq nc (getreal "\n numero cicli [1]: "))
(if (= nc nil)(setq nc 1))
(setq p0 (getpoint "\n seleziona un punto nel disegno..."))
(while (<= i nc)
(repeat np
(setq p1
(list
(+ (+ (* (rn)(cos(+ a (rn))))(* (rn)(sin(+ a (rn)))))(car p0))
(+ (- (* (rn)(cos(+ a (rn))))(* (rn)(sin(+ a (rn)))))(cadr p0))
)
)
(command "_point" p1)
)
(setq i (1+ i)
a (+ a 0.5)
p0 p1
)
)
)
(defun c:plv ( / snapp )
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(polvere)
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
Command: plv
numero punti [100]: Invio
numero cicli [1]: 10
seleziona un punto nel disegno...
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 7 Maggio 2005
|