
- •Приложение Функции, реализующие основные действия векторной алгебры
- •I.Функция, вычисляющая значение интерполяционного многочлена Лагранжа
- •I.Функции, строящие в векторном виде кривые Безье
- •I.Функции, строящие матрицы элементарных линейных преобразований
- •I.Функция, строящая матрицу диметрического проективного преобразования
- •II.Функция, строящая перспективную проекцию пространственого объекта
- •I. Текст функции trap
- •II. Текст функции orth
- •Указания к выполнению работ
- •Библиографический список
- •Содержание
I.Функции, строящие матрицы элементарных линейных преобразований
1. Построение матрицы сдвига на вектор (a,b,c,)
(defun SD (a b c); ф-ция построения матрицы сдвига на
; вектор (a,b,c), результат – в списке MSD
(setq l1( list 1 0 0 a) l2( list 0 1 0 b) l3( list 0 0 1 c) l4( list 0 0 0 1) MSD ( list l1 l2 l3 l4)) )
2. Построение матрицы отражения
(defun MR (a b c); ф-ция построения матрицы отражения.
; Изменения знаков координат по оcям указываются при
; помощи (-1), сохранение (+1), результат – в списке MMR
(setq l1( list a 0 0 0) l2( list 0 b 0 0) l3( list 0 0 c 0) l4( list 0 0 0 1) MMR ( list l1 l2 l3 l4)) )
3. Построение матрицы изменения масштаба по осям с коэффициентами (a,b,c,)
(defun SC (a b c); ф-ция построения матрицы изменения
; масштаба по осям с коэффициентами (a,b,c), результат – в
; списке MSC
(setq l1( list a 0 0 0) l2( list b 0 0) l3( list 0 0 c 0) l4( list 0 0 0 1) MSC ( list l1 l2 l3 l4)) )
4. Построение матрицы поворота вокруг оси х на угол a
(defun RX (a); ф-ция построения матрицы пов-та вокруг оси
; х на угол a, рез-т – в списке MRX
(setq l1( list 1 0 0 0) l2( list 0 (cos a) (- 0 (sin a)) 0) l3 ( list 0 (sin a) (cos a) 0) l4( list 0 0 0 1) MRX ( list l1 l2 l3 l4)) )
5. Построение матрицы поворота вокруг оси y на угол b
(defun RY (b); ф-ция построения матрицы пов-та вокруг оси
220
; у на угол b, рез-т – в списке MRY
(setq l1( list (cos b) 0 (sin b) 0) l2 ( list 0 1 0 0) l3 ( list (- (sin b)) 0 (cos b) 0) l4( list 0 0 0 1) MRY ( list l1 l2 l3 l4)) )
6. Построение матрицы поворота вокруг оси z на угол c
(defun RZ (c); ф-ция построения матрицы пов-та вокруг оси
; z на угол c, рез-т – в списке MRZ
(setq l1( list (cos c) (- 0 (sin c)) 0 0) l2( list (sin c) (cos c) 0 0) l3 ( list 0 0 1 0) l4( list 0 0 0 1)
MRZ ( list l1 l2 l3 l4)) )
7
I.Функция, строящая матрицу диметрического проективного преобразования
(defun DIMMETR (k); ф-ция построения матрицы
; диметрического проективного преобразования с коэффи-
; циентом k, результат – в списке mdim
; 1. вычисление вспомогательных углов поворота (ksi,fi)
; вокруг осей х,у
(setq cksi (sqrt (/ 2 (+ 2 (* k k)))) tksi (/ (sqrt (- 1 (* cksi cksi))) cksi) ksi (atan tksi))
(setq c2fi (- 1 (* k k)) cfi (sqrt (* 0.5 (+ 1 c2fi))) tfi (/ (sqrt (- 1 (* cfi cfi))) cfi) cfi) fi (atan tfi))
; формирования матриц поворота вокруг осей х,у и
; ортогональной проекции на пл-сть z=0
(rx fi) (ry ksi) (orz 0)
; умножение матриц элементарных преобразований и
; формирование итоговой матрицы
(mm mry mrx) (mm morz mrez) (setq mdim mrez) )
II.Функция, строящая перспективную проекцию пространственого объекта
(defun Persp (spp n spl m p q r); ф-ция постpоения тpехточеч-
221
; ной пеpспективной пpоекции spp-список длины n одно-
; pодных кооpдинат вершин объекта
; spl-список длины m паp номеpов точек в pебpах
; p,q,r-коэфициенты пеpспективных пpеобpазований по осям ; x,y,z
; Pасчет пеpспективных одноpодных кооpдинат точек
; (массив spp n)
(setq i 0 spo nil ) (repeat n (progn
(setq pt (nth i spp) x (nth 0 pt) y (nth 1 pt) z (nth 2 pt) d (+ (* x p) (* y q) (* z r) 1)
po (list (/ x d) (/ y d) (/ z d) 1) spo (cons po spo) i (+ i 1) )
) ) (setq sppn (reverse spo))
;Вычерчивание линий (пары из номеров точек - из массива spl,
;новые координаты точек - из массива sppn)
(setq i m) (repeat m (progn (setq i (- i 1) nomp (nth i spl) )
;Извлечение полных однородных координат точек (x,y,z,1) линий (р1,р2)
;Формирование 2-мерных координат точек (х,у) (pt1,pt2)
(setq p1 (nth (nth 0 nomp) sppn) pt1 (list (nth 0 p1) (nth 1 p1)) p2 (nth (nth 1 nomp) sppn) pt2
(list (nth 0 p2) (nth 1 p2)) )
;Вычерчивание рёбер объекта
(command "LINE" pt1 pt2 "")
))
)
8