- •Приложение Функции, реализующие основные действия векторной алгебры
- •I.Функция, вычисляющая значение интерполяционного многочлена Лагранжа
- •I.Функции, строящие в векторном виде кривые Безье
- •I.Функции, строящие матрицы элементарных линейных преобразований
- •I.Функция, строящая матрицу диметрического проективного преобразования
- •II.Функция, строящая перспективную проекцию пространственого объекта
- •I. Текст функции trap
- •II. Текст функции orth
- •Указания к выполнению работ
- •Библиографический список
- •Содержание
I.Функция, вычисляющая значение интерполяционного многочлена Лагранжа
(defun lag (Np spt x) ;ф-ция вычисления значения
; многочлена Лагранжа в точке с координатой х, Np –
; количество точек интерполирования, уменьшенное на ; 1, spt - список координат этих точек; значение
; многочлена – в переменной S
; Начальные присваивания
(setq S 0. i 0)
; Внешний цикл по точкам интерполирования (для
; определения суммы)
(repeat (1+ Np) (progn
; Выбор координат по осям х,у текущей точки
; интерполирования (с номером i)
(setq pti (nth i spt) xi (nth 0 pti) yi (nth 1 pti))
;Начальные присваивания ф-ции Лагранжа и индекса j
(setq Fi 1. j 0)
;Внутр. цикл по точкам интерполирования (для
; определения значения ф-ции Лагранжа)
(repeat (1+ Np) (if (= i j ) (setq j (1+ j )) (progn
;Выбор координат по осям х,у текущей точки
; интерполирования (с номером j)
(setq ptj (nth j spt) xj (nth 0 ptj) yj (nth 1 ptj))
; Домножение величины Fi на отношение (x-xj)/(xi-xj),
; наращивание индекса j
(setq Fi (/ (* Fi (- x xj)) (- xi xj)) j (+ j 1))
))) ;Сложение величины S c очередным слагаемым
209
(setq S (+ S (* Fi yi)) i (1+ i ))
))
)
(defun c:o ( ); Отладочная функция, в которой по (Np
; +1) точке интерполирования строится в векторном
; виде многочлен Лагранжа (ломаная имеет n точек)
; Ввод исходных данных
(setq Np ( getint "Введите число точек интерполирования, уменьшенное на единицу:”))
(setq n ( getint "Введите число n точек на ломаной, заменяющей многочлен Лагранжа: "))
;Формирование списка координат точек интерполирования spt и отрисовка их на экране
(setq spt ()) (repeat (1+ Np) (progn
(setq pt (getpoint “Введите координаты очередной точки интерполирования (координата х должна возрастать)”) spt (cons pt spt))
(command “layer” Make “Color” “Red”) (command “circle” pt 1)
(command “layer” Make “Color” “White”)
)) ; Построение ломаной, имеющей n точек
; Начальные присваивания
(setq x (nth 0 (nth 0 spt)) dx (/ (- (nth 0 (nth n spt)) (nth 0 (nth 0 spt))) (- n 1)))
(lag Np spt x) (setq S1 S pt1 (list x S1))
; Цикл по координате х
(repeat (- n 1) (progn
(setq x (+ x dx)) (lag Np spt x) (setq pt2 (list x S)) (command “line” pt1 pt2 “”)(setq pt1 pt2)
))
)
210
II.Функция, строящая проекции на плоскость z=0 линий уровня билинейной поверхности, интерполированной по 4 точкам
Расчёт координат точек на билинейной поверхности по
значениям параметров
(defun sq (p1 p2 p3 P4 u v); функция вычисления координат
; точки ;поверхности,интерполированной по четырeм
; точкам Р1,Р2,Р3,Р4. Результат (х,у,z)- в списке р
(setq x1 (nth 0 p1) y1 (nth 1 p1) z1 (nth 2 p1) x2 (nth 0 p2) y2 (nth 1 p2) z2 (nth 2 p2))
(setq x3 (nth 0 p3) y3 (nth 1 p3) z3 (nth 2 p3) x4 (nth 0 p4) y4 (nth 1 p4) z4 (nth 2 p4))
(setq w (- 1 u) q (- 1 v))
(setq x (+ (* x1 w q) (* x2 u q) (* x3 v w) (* x4 u v)))
(setq y (+ (* y1 w q) (* y2 u q) (* y3 v w) (* y4 u v)))
(setq z (+ (* z1 w q) (* z2 u q) (* z3 v w) (* z4 u v)))
(setq p ( list x y z)) )
Построение проекций на плоскость z=0 линий уровня поверхности, интерполированной по четырём точкам
(defun Q (p1 p2 p3 p4 n); ф-ция построения линий уровня
; поверхности, интерполированной по 4 точкам Р1,Р2,Р3,Р4.
; n - число внутренних линий уровня по каждому параметру
; (u,v).Конечные коорд-ты линий уровня (х,у,z)-в списках
; spn,spk. На печать выдаются проекции линий уровня на
; пл-ть z=0
(command "layer" "s" "0" "")
; Построение внутренних линий уровня по 1-му параметру
(setq di (/ 1.0 (+ n 1)) i di) (repeat n (progn
(sq p1 p2 p3 p4 i 0) (setq pn p) (sq p1 p2 p3 p4 i 1) (command "line" pn p "")
(setq spn (cons pn spn) spk (cons p spk) i (+ i di)) ))
; Построение внутренних линий уровня по 2-му параметру
(setq i di) (repeat n (progn
(sq p1 p2 p3 p4 0 i) (setq pn p) (sq p1 p2 p3 p4 1 i) (command "line" pn p "")
211
(setq spn (cons pn spn) spk (cons p spk) i (+ i di)) ))
; Построение внешних линий уровня (границ) поверхности
(command "layer" "s" "dim" "")
(command "line" p1 p2 "")(setq spn (cons p1 spn) spk (cons p2 spk))
(command "line" p2 p4 "")(setq spn (cons p2 spn) spk (cons p4 spk))
(command "line" p3 p4 "")(setq spn (cons p3 spn) spk (cons p4 spk))
(command "line" p3 p1 "")(setq spn (cons p3 spn) spk (cons p1 spk)) )
3. Пример отладочной функции
(defun c:o ();отладочная функция
(setq p1 (list 9 9 6) p2 (list 130 165 60) p3 (list 190 175 60) p4 (list 320 150 90))
(Q p1 p2 p3 p4 20) )
4
I.Функция, строящая проекции на плоскость z=0 линий уровня линейчатой поверхности, интерполированной по двум кривым
Расчёт координат точек на линейчатой поверхности по значениям параметров
(defun stlin (P u v);функция расчёта координат (х,у,z) точки
; (список sp)на линейчатой ;поверхности P(u,v),построенной
; по кривым Р(u,0), P(u,1) исходной поверхности .
(setq dv (- 1 v)) (p u 0) (setq x0 x y0 y z0 z) (p u 1)
(setq x (+ (* x0 dv) (* x v)) y (+ (* y0 dv) (* y v)) z (+ (* z0 dv) (* z v)) sp (list x y z)) )
Построение проекций на плоскость z=0 линий уровня линейчатой поверхности, интерполированной по двум кривым
212
(defun LIN (P n); ф-ция построения проекций на плоскость
; z=0 линий уровня линейчатой поверхности P(u,v),
; интерполированной по двум кривым P(u,0),P(u,1).n -число
; внутренних точек ;на кривых.Конечные координаты линий
; - в списках spn и spk.
(command "layer" "s" "0" "") (setq di (/ 1. (+ n 1)) i 0) (repeat (+ n 2) (progn
(stlin P i 0.) (setq ln sp spn (cons ln spn)) (stlin P i 1.) (setq lk sp spk (cons lk spk))
(command "line" ln lk "" ) (setq i (+ i di)) ))
(command "layer" "s" "dim" "") (setq j 1) (repeat (+ n 1) (progn
(command "line" (nth (- j 1) spn) (nth j spn) "") (command "line" (nth (- j 1) spk) (nth j spk) "")
(setq j (+ j 1)) )) )
3. Пример отладочной функции и функции P (u v)
(defun c:o ( );отладочная функция(setq n (getint "\n Введите число внутренних точек на кривых")) (LIN P n) )
(defun P (u v)
;Отладочный вариант функции P (u v)
(setq x (* 200 (+ (cos u) (* v v))) y (* 100 (+ 0.4 v (* (+ 1 v) (sin u)))) z (+ x y)) )
5
