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

ГМ / Lab1

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

Студента ИТ 14-1 Красовского А.В.

Лабораторная работа 1

Построение аналитически заданных трехмерных объектов. Построение линии пересечения объемных геометрических объектов.

Цель работы: выработка практических навыков в разработке и отладке программ для построения аналитически заданных трехмерных поверхностей, построения линий пересечения объемных геометрических объектов.

Вариант 11

Задание: построить поверхности второго порядка и их линию пересечения.

Программа:

;;;Ellips in YZ

(defun ell_Y (fy fz c d e R dx dy)

(setq xmax (* c R))

(setq x (- (* c R)))

(while (< x xmax)

(setq ya 0.0)

(setq yk (sqrt (* d d (- (* R R) (/ (* x x) (* c c))))))

(setq z (* fz (sqrt (* e e (- (* R R) (/ (* x x) (* c c)))))))

(setq p1 (list x ya z))

(while (> (- yk ya) dy)

(setq ya (+ ya dy))

(setq y (* fy ya))

(setq z

(* fz

(sqrt (* e

e

(- (* R R) (/ (* x x) (* c c)) (/ (* y y) (* d d))) ) ) ) )

(setq p2 (list x y z))

(command "_LINE" p1 p2)

(command)

(setq p1 p2)

)

(setq y (* fy yk))

(setq p2 (list x y 0.0))

(command "_LINE" p1 p2)

(command)

(setq x (+ x dx))

)

)

;;; Ellips in XZ

(defun ell_X (fx fz c d e R dx dy)

(setq ymax (* d R))

(setq y (- (* d R)))

(while (<= y ymax)

(setq xa 0.0)

(setq xk (sqrt (* c c (- (* R R) (/ (* y y) (* d d))))))

(setq z (* fz (sqrt (* e e (- (* R R) (/ (* y y) (* d d)))))))

(setq p1 (list xa y z))

(while (> (- xk xa) dx)

(setq xa (+ xa dx))

(setq x (* fx xa))

(setq z

(*fz (sqrt (* e e

(- (* R R) (/ (* x x) (* c c)) (/ (* y y) (* d d)))

)

)

)

)

(setq p2 (list x y z))

(command "_LINE" p1 p2)

(command)

(setq p1 p2)

)

(setq x (* fx xk))

(setq p2 (list x y 0.0))

(command "_LINE" p1 p2)

(command)

(setq y (+ y dy))

)

)

;;;Konus in YZ

(defun kon_Y (fy fz a b dx dy lim)

(setq xmax lim)

(setq x (- lim))

(while (<= x xmax)

(setq ya 0.0)

(setq yk lim)

(setq z (* fz (* (/ b a) (sqrt (+ (* x x) (* ya ya))))))

(setq p1 (list x ya z))

(while (>= (- yk ya) dy)

(setq ya (+ ya dy))

(setq y (* fy ya))

(setq z (* fz (* (/ b a) (sqrt (+ (* x x) (* y y))))))

(setq p2 (list x y z))

(command "_LINE" p1 p2)

(command)

(setq p1 p2)

)

(setq y (* fy yk))

(setq p2 (list x y 0.0))

(setq x (+ x dx))

)

)

;;; Konus in XZ

(defun kon_X (fx fz a b dx dy lim)

(setq ymax lim)

(setq y (- lim))

(while (<= y ymax)

(setq xa 0.0)

(setq xk lim)

(setq z (* fz (* (/ b a) (sqrt (+ (* xa xa) (* y y))))))

(setq p1 (list xa y z))

(while (>= (- xk xa) dx)

(setq xa (+ xa dx))

(setq x (* fx xa))

(setq z (* fz (* (/ b a) (sqrt (+ (* x x) (* y y))))))

(setq p2 (list x y z))

(command "_LINE" p1 p2)

(command)

(setq p1 p2)

)

(setq x (* fx xk))

(setq p2 (list x y 0.0))

(setq y (+ y dy))

)

)

;;; Line

(defun lp (a b c d e R k fy fz)

(setq xn

(-

(sqrt

(/ (* e e R R)

(+ (/ (* e e) (* c c)) (/ (* b b) (* a a)))

)

)

)

)

(setq xk

(sqrt

(/ (* e e R R)

(+ (/ (* e e) (* c c)) (/ (* b b) (* a a)))

)

)

)

(setq x1 xn)

(setq x2 xn)

(setq i 0)

(setq dx (/ (- xk xn) k))

(setq

y1

(* fy

(sqrt

(abs

(/ (- (* e e R R)

(* x1 x1 (+ (/ (* b b) (* a a)) (/ (* e e) (* c c))))

)

(+ (/ (* b b) (* a a)) (/ (* e e) (* d d)))

) ) ) ) )

(setq

z1 (* fz

(sqrt

(* e

e

(- (* R R) (/ (* x1 x1) (* c c)) (/ (* y1 y1) (* d d)))

) ) ) )

(setq p1 (list x1 y1 z1))

(while (< i k)

(setq x2 (+ x1 dx))

(setq

y2

(* fy

(sqrt

(abs

(/ (- (* e e R R)

(* x2 x2 (+ (/ (* b b) (* a a)) (/ (* e e) (* c c))))

)

(+ (/ (* b b) (* a a)) (/ (* e e) (* d d)))

)

) ) ) )

(setq z2

(* fz

(sqrt

(* e

e

(- (* R R) (/ (* x2 x2) (* c c)) (/ (* y2 y2) (* d d)))

) ) ) )

(setq p2 (list x2 y2 z2))

(command "_Line" p1 p2)

(command)

(setq x1 x2)

(setq p1 p2)

(setq i (+ i 1))

))

(defun draw ()

(command "_osnap" "_off")

(setq a 120.0)

(setq b 50.0)

(setq c 1.0)

(setq d 1.0)

(setq e 1.0)

(setq R 100.0)

(setq lim (max a b c d e))

(setq dx 10.0)

(setq dy 10.0)

(command "_COLOR" "_YELLOW")

(ell_Y 1 1 c d e R dx dy)

(ell_Y 1 -1 c d e R dx dy)

(ell_Y -1 1 c d e R dx dy)

(ell_Y -1 -1 c d e R dx dy)

(ell_X 1 1 c d e R dx dy)

(ell_X 1 -1 c d e R dx dy)

(ell_X -1 1 c d e R dx dy)

(ell_X -1 -1 c d e R dx dy)

(command "_COLOR" "_RED")

(kon_Y 1 1 a b dx dy lim)

(kon_Y 1 -1 a b dx dy lim)

(kon_Y -1 1 a b dx dy lim)

(kon_Y -1 -1 a b dx dy lim)

(kon_X 1 1 a b dx dy lim)

(kon_X 1 -1 a b dx dy lim)

(kon_X -1 1 a b dx dy lim)

(kon_X -1 -1 a b dx dy lim)

(command "_COLOR" "_BLUE")

(lp a b c d e R 100.0 1 1)

(lp a b c d e R 100.0 -1 1)

(lp a b c d e R 100.0 1 -1)

(lp a b c d e R 100.0 -1 -1)

)

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

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