Page 72 - AutoLISP и Visual LISP в среде AutoCAD
P. 72

(setq newsize size)
                               (repeat 8 ; количество подуровней
                                  (setq xnew (+ x (* newsize (cos (* i step)))))
                                  (setq ynew (+ y (* newsize (sin (* i step)))))
                                  (Sneg xnew ynew (/ newsize 5)) ;РЕКУРСИЯ !!!
                                  (setq newsize (/ (* newsize 2) 3))
                              );repeat
                              (setq i (1+ i))
                           );repeat
                      );progn
                   );if
                   (prin1)
                  );defun
                  ;***************** ОСНОВНАЯ ЧАСТЬ ****************
                  (Sneg 400 400 240)            ; РИСУЕМ СНЕЖИНКУ
                  (command "_ZOOM" "_e") ; Покажи границы рисунка
                  ;*************************************************























                                               Рис.6. Фрактальная снежинка.
                                                    488300 окружностей!


                         Еще  одним  примером  фрактала  является  фрактал  ДЕРЕВО.  Обратите
                  внимание, на возможность изменять угол наклона веток и управлять густотой
                  кроны. Результат работы программы представлен на рис.7.


                  ;******** Генератор случайных чисел 0..1  **************
                  (defun Random (/ modulus multiplier increment random )
                    (if (not *seed*)
                      (setq *seed* (getvar "DATE"))
                    )
                    (setq modulus 65536
                             multiplier 25173
                             increment 13849
                             *seed* (rem (+ (* multiplier *seed*) increment) modulus)
                             Random (/ *seed* modulus)
                    )
                  );defun
                  ;******** Генератор случайных целых чисел 0..x ********
                  (defun RRandom (x / R)
                            (setq R (fix (* x (Random))))

                                                                                                             71
   67   68   69   70   71   72   73   74   75   76   77