Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M_П_Л_С205_234.doc
Скачиваний:
1
Добавлен:
24.04.2019
Размер:
230.91 Кб
Скачать

1. Кинематически и динамически согласованное движение различных его частей.

2. При наличии эластичных оболочек - их согласованную де-формацию.

Для обеспечения кинематического и динамического согласования в дополнение к 3D - модели объекта необ-ходимо задать его кинематический скелет, массы отдельных составляющих, жёсткости связей и другие данные, необ-ходимые для реалистического моделирования перемещений отдельных составляющих частей объекта. В качестве исходных данных при расчёте движения всего объекта обычно задают требуемые перемещения его отдельных частей - например, следы, которые должны оставить конечности шагающего объекта, траектории колёс и т.д.

Для правдоподобия при анимации живых объектов применяют дополнительные программы, моделирующие перемещения и складки кожи, набухание мышц, движение одежды и т.д.

Обычно анимационные пакеты программ разрабатыва-ют как дополнение к базовым пакетам по 3D-моделиро-ванию. Однако в настоящее время существуют и отдельные специальные пакеты по анимации.

204

Приложение Функции, реализующие основные действия векторной алгебры

  1. Скалярное произведение векторов

(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) )

  1. Умножение матрицы на вектор

(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))) )

  1. Транспонирование матрицы

(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))) )

  1. Умножение матриц

(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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]