ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.06.2019
Просмотров: 115
Скачиваний: 1
Студента ИТ 14-1 Красовского А.В.
Лабораторная работа 2
Методы конструирования кривых
Цель работы: выработка практических навыков конструирования кривых.
Вариант 11
Задание:
1) Сконструировать кривую по заданным точкам методом Фергюсона. Создать функцию, рисующую кривую в плоскости xy, исходные точки отметить маркерами. Оформить таблицу значений функций и отклонений от заданных значений в опорных точках.
2) Сконструировать кривую по заданным точкам методом Безье. Создать функцию, рисующую кривую и характеристическую ломанную. Оформить таблицу значений функции и отклонений от заданных значений в опорных точках.
Код программы:
(defun rs() (setq ur (- 1 u)) (setq a3 (* r0 (expt ur 3))) (setq a2 (* 3 u ur ur r1)) (setq a1 (* 3 u u ur r2)) (setq a0 (* r3 (expt u 3))) (setq r (+ a3 a2 a1 a0)) ) (defun fg() (setq u1 (+ (- 1 (* 3 u u)) (* 2 u u u) )) (setq u2 (- (* 3 u u) (* 2 u u u) )) (setq u3 (+ (- u (* 2 u u)) (* u u u) )) (setq u4 (- (* u u u) (* u u) )) (setq lr0 r0) (setq lr1 r3) (setq dr0 (* 3 (- r1 r0))) (setq dr1 (* 3 (- r3 r2))) (setq r (+ (* lr0 u1) (* lr1 u2) (* dr0 u3) (* dr1 u4) )) ) (defun funct(zu) (setq u zu) ; x 0.0 (setq r0 2.0) (setq r1 (nth 0 p1)) (setq r2 (nth 0 p2)) ; x 1.0 (setq r3 2.0) (if(= ch 1) (rs) (fg) ) (setq x r) ; y 0.0 (setq r0 1.0) (setq r1 (nth 1 p1)) (setq r2 (nth 1 p2)) ; y 1.0 (setq r3 1.0) (if(= ch 1) (rs) (fg) ) (setq y r) (setq pt (list x y)) (print pt) ) |
(defun lr( ) (setvar "blipmode" 0) (setvar "cmdecho" 0) (setvar "pdsize" 2) (command "_ZOOM" "_W" '(40 -50) '(250 150)) (setq st "Y") (while (= st "Y") (command "_ERASE" "_C" '(40 -50) '(250 150) "") (setvar "pdmode" 3) ; x 0.0 y 0.0 (setq p0 '(90.0 78.0)) ; x 1.0 y 1.0 (setq p3 '(90.0 78.-)) (command "_COLOR" 2) ; x 0.2 y 0.2 (command "_POINT" '(185.0 218.8)) ; x 0.4 y 0.4 (command "_POINT" '(255.0 284ю4)) ; x 0.6 y 0.6 (command "_POINT" '(277.8 279.6)) ; x 0.8 y 0.8 (command "_POINT" '(230.3 209.2)) (setq p1 (getpoint "\nPoint_1 : ")) (setq p2 (getpoint "\rPoint_2 : ")) (setq ch (getint "choose 1-rs; 2-gr : ")) (command "_COLOR" 3) (command "_POINT" p0) (command "_POINT" p1) (command "_POINT" p2) (command "_POINT" p3) (command "_COLOR" 5) (command "_LINE" p0 p1 p2 p3) (command) (setq du 0.02) (setq u 0.0) (setq pl1 p0) (command "_COLOR" 1) (while (<= (+ u du) 1.0) ; x 0.0 (setq r0 45.0) (setq r1 (nth 0 p1)) (setq r2 (nth 0 p2)) ; x 1.0 (setq r3 45.0) (if(= ch 1) (rs) (fg)) (setq x r) ; y 0.0 (setq r0 34.0) (setq r1 (nth 1 p1)) (setq r2 (nth 1 p2)) ; y 1.0 (setq r3 35.0) (if(= ch 1) (rs) (fg) ) (setq y r) (setq pl2 (list x y)) (command "_LINE" pl1 pl2) (command) (setq u (+ u du)) (setq pl1 pl2) ) (command "_LINE" pl1 p3) (command) (print p1) (print p2) (setq st (getstring "\nСледующее приближение ? (У/N) : ")) (setq st (strcase st)) ) ) |
Результат выполнения програмы:
Вывод: в результате выполнения данной лабораторной работы я выработал практические навыки конструирования кривых.