
- •Приложение Функции, реализующие основные действия векторной алгебры
- •I.Функция, вычисляющая значение интерполяционного многочлена Лагранжа
- •I.Функции, строящие в векторном виде кривые Безье
- •I.Функции, строящие матрицы элементарных линейных преобразований
- •I.Функция, строящая матрицу диметрического проективного преобразования
- •II.Функция, строящая перспективную проекцию пространственого объекта
- •I. Текст функции trap
- •II. Текст функции orth
- •Указания к выполнению работ
- •Библиографический список
- •Содержание
1. Кинематически и динамически согласованное движение различных его частей.
2. При наличии эластичных оболочек - их согласованную де-формацию.
Для обеспечения кинематического и динамического согласования в дополнение к 3D - модели объекта необ-ходимо задать его кинематический скелет, массы отдельных составляющих, жёсткости связей и другие данные, необ-ходимые для реалистического моделирования перемещений отдельных составляющих частей объекта. В качестве исходных данных при расчёте движения всего объекта обычно задают требуемые перемещения его отдельных частей - например, следы, которые должны оставить конечности шагающего объекта, траектории колёс и т.д.
Для правдоподобия при анимации живых объектов применяют дополнительные программы, моделирующие перемещения и складки кожи, набухание мышц, движение одежды и т.д.
Обычно анимационные пакеты программ разрабатыва-ют как дополнение к базовым пакетам по 3D-моделиро-ванию. Однако в настоящее время существуют и отдельные специальные пакеты по анимации.
204
Приложение Функции, реализующие основные действия векторной алгебры
Скалярное произведение векторов
(defun scal (a b n);выч.скалярного произведения векторов ;а[1:n],b[1:n],результат - в переменной sca
(setq s1 0 isc 0) (repeat n (progn (setq ai (nth isc a) bi (nth isc b) s1 (+ s1 (* ai bi)) isc (+ isc 1))
)) (setq sca s1) )
Умножение матрицы на вектор
(defun mv (a bv n) ;выч. произведения матрицы а[1:n,1:n] на ;вектор bv[1:n], результат - в списке vec[1:n]
(setq imv 0 v1 (list ())) (repeat n (progn
(setq st (nth imv a)) (scal st bv n) (setq v1 (cons sca v1) imv (+ imv 1))
)) (setq vec (cdr (reverse v1))) )
Транспонирование матрицы
(defun tran (a n) ;транспонирование матрицы а[1:n,1:n] в ;матрицу mtr[1:n,1:n]
(setq imt 0 mt1 (list ())) (repeat n (progn (setq jmt 0 sp (list())) (repeat n (progn
(setq tr (nth jmt a) e (nth imt tr) sp (cons e sp) jmt (+ jmt 1))
)) (setq mt1 (cons (cdr (reverse sp)) mt1)imt (+ imt 1))
)) (setq mtr (cdr (reverse mt1))) )
Умножение матриц
(defun mm (a bm n) ;вычисление произведения матриц
; а[1:n,1:n],bm[1:n,1:n],результат - в списке mrez[1:n,1:n]
(tran bm n) (setq mtr1 (list ()) bmt mtr jmm 0)
(repeat n (progn (setq sr (nth jmm bmt))
205
(mv a sr n) (setq mtr1 (cons vec mtr1) jmm (+ jmm 1))
)) (trans (cdr (reverse mtr1)) n) (setq mrez mtr) )
5. Решение системы линейных уравнений методом Гаусса
(defun gauss (a b n);решение системы линейных уравнений
; а[1:n,1:n]*х[1:n]=в[1:n] методом Гаусса (результат - в
; векторе x[1:n])
;Шаг 1.Переписывание матрицы а[1:n,1:n] в матр. с[1:n,1:n]
;Ввод порядкового вектора cтолбцов p[1:n].
(setq c a ig n p (list ())) (repeat n (setq ig (- ig 1) p (cons ig p)) )
;Шаг 2.Прямой ход метода Гаусса.
(setq ig 0) (repeat n (progn
;Шаг 2.1.Выбор главного (по модулю) эл-та cтроки с
; номером ig(G), номер G-NG.
(setq stg (nth ig c) G (abs (nth ig stg)) NG ig jg (+ ig 1))
(repeat (- (- n ig) 1) (progn (setq G1 (abs (nth jg stg)))
(if (> G1 G) (setq NG jg G G1)) (setq jg(+ jg 1))
)) (cond (= G 0) (print "определитель системы равен нулю"))
;Шаг 2.2.Перестановка элементов в порядковом векторе Р с
; номерами ig и NG.
(setq iig n p1 (list ())) (repeat (- (- n NG) 1)
(setq iig (- iig 1) p1 (cons (nth iig p) p1))
) (setq p1 (cons (nth ig p) p1) iig (- NG 1))
(repeat (- (- NG ig) 1) (setq p1 (cons (nth iig p) p1) iig (- iig 1))
) (cond ((> NG ig) (setq p1 (cons (nth NG p) p1))))
(setq iig (- ig 1)) (repeat ig
(setq p1 (cons (nth iig p) p1) iig (- iig 1))
) (setq p p1)
;Шаг 2.3.Перест. столбцов с номерами ig,NG(iig-номера
; обрабат.строк).
(setq nstr n) (repeat n (progn
(setq nstr (- nstr 1) stp (nth nstr c) stp1 (list ()) iig n)
(repeat (- (- n NG) 1) (setq iig (- iig 1) stp1 (cons (nth iig stp) stp1))
) (setq stp1 (cons (nth ig stp) stp1) iig (- NG 1))
206
(repeat (- (- NG ig) 1)
(setq stp1 (cons (nth iig stp) stp1) iig (- iig 1))
)
(cond ((/= ig NG )
(setq stp1 (cons (nth NG stp) stp1)))) (setq iig (- ig 1))
(repeat ig
(setq stp1 (cons (nth iig stp) stp1) iig (- iig 1))
) (setq c1 (cons stp1 c1))
)) (setq c c1)
;Шаг 2.4.Деление строки с номером ig и элемента b[ig] на
; диагональный (главный) элемент.
(setq iig n c1 (list ())) (repeat (- (- n ig) 1)
(setq iig (- iig 1) sttq (nth iig c) c1 (cons sttq c1) b1(cons (nth iig b) b1))
) (setq stg (nth ig c) del (float (nth ig stg)) iig n)
(repeat n (setq iig (- iig 1) stg1 (cons (/ (nth iig stg) del) stg1))
) (setq c1 (cons stg1 c1) b1 (cons (/ (nth ig b) del) b1) iig ig)
(repeat ig
(setq iig (- iig 1) c1 (cons (nth iig c) c1) b1 (cons (nth iig b) b1))
) (setq c c1 b b1)
;Шаг 2.5.Обнуление эл.в столбце ig(строки с номерами,
; большими ig).Изменение вектора b[ ]
(setq iig n c1 (list ()) stg (nth ig c))
;Преобразование строк под строкой с текущим номером ig
(repeat (- (- n ig) 1) (progn
(setq iig (- iig 1) stg1 (nth iig c) del (float (nth ig stg1)))
(setq jg n stg2 (list ())) (repeat (- (- n ig) 1)
(setq jg (- jg 1) e (nth jg stg) e1 (nth jg stg1) stg2 (cons (- e1 (* e del)) stg2))
) (setq e (nth ig b) e1 (nth iig b) ee (* e del) es (- e1 ee))
(setq b1(cons es b1) jg ig) (repeat (+ ig 1)
(setq stg2(cons 0 stg2) jg (- jg 1))
) (setq c1 (cons stg2 c1))
)) (setq c1 (cons stg c1) b1 (cons (nth ig b) b1) iig ig)
207
(if (/= ig 0) (repeat ig
(setq iig(- iig 1) c1 (cons (nth iig c) c1) b1 (cons (nth iig b) b1))
)) (setq c c1 b b1 ig (+ ig 1)) ))
;Шаг.3.Обратный ход
(setq ig n)
;цикл по строкам снизу вверх от (n-1)-ой до 0-ой (ig)
(repeat (- n 1) (progn
;Шаг.3.1.Запись в матрицу С1 строк (и элементов в.b) с
; (n-1)-ых по ig-ые включительно.
(setq ig (- ig 1) jg n) (repeat (- n ig)
(setq jg (- jg 1) str (nth jg c) c1 (cons str c1) b1 (cons (nth jg b) b1))
) (setq deli (float (nth ig b)))
;Шаг.3.2.Обработка строк матр.C и элементовтов b,
; лежащих выше ig-ых (jg-их номера)
(setq jg ig) (repeat ig (progn
(setq jg (- jg 1) str (nth jg c) el (nth ig str))
;Шаг.3.2.1.Запись элементов строк с (n-1)-го по ig-тый (jgg –
; номер эл-та)
(repeat (- n ig) (setq str1 (cons 0 str1)) )
;Шаг.3.2.2.Запись элементов строк с (ig-1)-го по 0 (jgg –
; номер эл-та)
(setq jgg ig) (repeat ig
(setq jgg (- jgg 1) str1 (cons (nth jgg str) str1))
)(setq c1 (cons str1 c1) delj (nth jg b) b1 (cons (- delj (* deli el)) b1))
)) (setq c c1 b b1) ))
;Шаг 4.Запись вектора b с учетом перестановок столбцов \
;при прямом ходе
(setq ig n) (repeat n
(setq ig(- ig 1) b1 (cons (nth (nth ig p) b) b1))
) (setq x b1) )
(defun c:o (); функция для отладки функции gauss
208
(setq n 4 a1 (list 2 3 1 6) a2 (list 3 2 4 0) a3 (list 5 1 6 9) a4 (list 9 3 1 7)
(setq a (list a1 a2 a3 a4) b (list 43 12 58 62)) (print b)
(gauss a b n) (mv a x n) (print "proof= ") (print v) )
2