Lisp »Tips 'n Tricks
»Numeri casuali in AutoLISP »1 | 2 | 3
Mappe di punti casuali 2/3D
RPT è un lisp per generare mappe di punti casuali 2d.
;;;
;;; rpt.lsp (ver. 1.0) - 18 Febbraio 2004
;;; (C)2004 by Claudio Piccini
;;; http://www.cg-cad.com/
;;;
;;; Genera una mappa di punti casuali p(x,y)
;;;
(defun rn (sd)
(setq m 65521 b 15937 c 33503 sd
(rem (+ (* b sd) c) m)
)
(* (/ sd m) r)
)
(defun c:rpt ( / conta sx ls nls k x y pt)
(setvar "cmdecho" 0)
(setq ls (list nil))
(initget (+ 1 4))
(setq sd (getreal "\nValore del seme? "))
(initget (+ 1 2 4))
(setq conta (getint "\nQuanti numeri? "))
(initget (+ 1 2 4))
(setq r (getint "\nIntervallo da 0 a? "))
(repeat conta
(setq sx (rn sd))
(setq ls (append ls (list sx)))
(setq sd sx)
)
(setq ls (cdr ls))
(setq nls (length ls))
(if (/= (rem nls 2) 0)
(progn
(setq ls (append ls (list 1)))
(setq nls (+ nls 1))
)
)
(setq k 0)
(repeat nls
(setq x (nth k ls))
(setq y (nth (+ k 1) ls))
(setq pt (list x y))
(command "_point" pt)
(setq k (+ k 1))
)
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test
Command: rpt
Valore del seme? 0
Quanti numeri? 2000
Intervallo da 0 a? 20
Con questi valori tutti i punti stanno su alcune rette parallele tra loro.
Command: rpt
Valore del seme? 0
Quanti numeri? 500
Intervallo da 0 a? 100
Command: rpt
Valore del seme? 0
Quanti numeri? 500
Intervallo da 0 a? 1000
Command: rpt
Valore del seme? 0
Quanti numeri? 2000
Intervallo da 0 a? 4000
Con questi valori i punti si dispongono in modo casuale all'interno di un quadrato.
RPT3 è un lisp per generare mappe di punti casuali 3d.
;;;
;;; rpt3.lsp (ver. 1.0) - 18 Febbraio 2004
;;; (C)2004 by Claudio Piccini
;;; http://www.cg-cad.com/
;;;
;;; Genera una mappa di punti 3d casuali p(x,y,z)
;;;
(defun rn (sd)
(setq m 65521 b 15937 c 33503 sd
(rem (+ (* b sd) c) m)
)
(* (/ sd m) r)
)
(defun c:rpt3 ( / conta sx ls nls k x y z pt)
(setvar "cmdecho" 0)
(setq ls (list nil))
(initget (+ 1 4))
(setq sd (getreal "\nValore del seme? "))
(initget (+ 1 2 4))
(setq conta (getint "\nQuanti numeri? "))
(initget (+ 1 2 4))
(setq r (getint "\nIntervallo da 0 a? "))
(repeat conta
(setq sx (rn sd))
(setq ls (append ls (list sx)))
(setq sd sx)
)
(setq ls (cdr ls))
(setq nls (length ls))
(if (= (rem nls 2) 0)
(progn
(setq ls (append ls (list 1)))
(setq nls (+ nls 1))
)
)
(setq k 0)
(repeat nls
(setq x (nth k ls))
(setq y (nth (+ k 1) ls))
(setq z (nth (+ k 2) ls))
(setq pt (list x y z))
(command "_point" pt)
(setq k (+ k 1))
)
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test
Command: rpt3
Valore del seme? 0
Quanti numeri? 1000
Intervallo da 0 a? 1000
I punti formano una nube cubica.
|
Command: rpt3
Valore del seme? 0
Quanti numeri? 2000
Intervallo da 0 a? 20
I punti si dispongono su rette parallele all'interno di un cubo.
|
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 18 Febbraio 2004
|