这个办法不好 - ;;---------------------------------------------------------------------------;;
- ;; initialize the global
- ;;---------------------------------------------------------------------------;;
- (setq *SeedRand* nil)
- ;;---------------------------------------------------------------------------;;
- ;; the base function for random
- ;;---------------------------------------------------------------------------;;
- (defun rand16 (/ s)
- ;; when this is used for the first time, initialize the seed
- ;; from the system clock.
- (if (null *SeedRand*)
- (progn
- (setq s (getvar "date"))
- (setq *SeedRand* (fix (* 86400 (- s (fix s)))))
- )
- ;; progn
- )
- ;; if
- ;; To generate a psudo-sandom number sequence
- ;; I use the routine described in Kernighan and Ritchie's
- ;; "C Programming Language" second edition, p46
- (setq *SeedRand* (+ (* *SeedRand* 1103515245) 12345))
- ;; trim off the bits left of the 16th bits
- (logand (/ *SeedRand* 65536) 32767)
- )
- ;;---------------------------------------------------------------------------;;
- ;; generates a random number between min and max. ;;
- ;; min and max must be a non-negative integer smaller than 32678. ;;
- ;;---------------------------------------------------------------------------;;
- (defun rand (umin umax / r16 range quotient remainder result)
- (setq r16 (rand16))
- ;; random number smaller than 32678
- (setq range (+ 1 (- umax umin)))
- ;; number of integers to be produced
- (setq quotient (/ r16 range))
- ;; result in non-neg. integer
- (setq remainder (- r16 (* quotient range)))
- (setq result (+ umin remainder))
- result
- )
我用了上面的代码,比刚才稍微好一点,但也不行,郁闷啊
Autolisp做随机都不行
|