Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ГМ / Lab2

.docx
Скачиваний:
18
Добавлен:
30.06.2018
Размер:
86.84 Кб
Скачать

Студента ИТ 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))

)

)

Результат выполнения програмы:

Вывод: в результате выполнения данной лабораторной работы я выработал практические навыки конструирования кривых.

Соседние файлы в папке ГМ