cg-Cad

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.

rpt.lsp

rpt.lspCommand: rpt
Valore del seme? 0
Quanti numeri? 500
Intervallo da 0 a? 100



rpt.lspCommand: rpt
Valore del seme? 0
Quanti numeri? 500
Intervallo da 0 a? 1000



rpt.lspCommand: 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

rpt3.lspCommand: rpt3
Valore del seme? 0
Quanti numeri? 1000
Intervallo da 0 a? 1000

I punti formano una nube cubica.



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

rpt3.lsp

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 18 Febbraio 2004