ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.06.2019
Просмотров: 130
Скачиваний: 1
Студента ИТ 14-1 Красовского А.В.
Лабораторная работа 1
Построение аналитически заданных трехмерных объектов. Построение линии пересечения объемных геометрических объектов.
Цель работы: выработка практических навыков в разработке и отладке программ для построения аналитически заданных трехмерных поверхностей, построения линий пересечения объемных геометрических объектов.
Задание: построить поверхности второго порядка и их линию пересечения.
Программа:
;;;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.