|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Построение линии пересечения объёмных геометрических объектовПостроение линии пересечения объёмных геометрических объектовЗадание №1 Построение линии пересечения объёмных геометрических объектов 1.1 Цель работы Выработка практических навыков в разработке и отладке программ для построения линий пересечения объёмных геометрических объектов. 1.2 Индивидуальное задание Построить поверхности второго порядка и их линию пересечения.
Методы конструирования кривых. 2.1 Цель работы Выработка практических навыков конструирования кривых. 2.2 Индивидуальное задание Сконструировать кривую по заданным точкам методом Фергюсона. Создать функцию рисующую кривую в плоскости XY, исходные точки отметить маркерами. Оформить таблицу значений функции и отклонений от заданных значений в опорных точках.
Итак, имеется 6 векторов и параметрический сплайн 5 степени - это есть необходимое и достаточное условие построения сегмента кривой проходящего через 6 точек. 2.4 Текст программы, реализующей метод Фергюсона. (defun task2() (command "erase" "all" "") (setq a15 117.1875) (setq a14 -255.2083333) (setq a13 -621.3541666) (setq a12 563.9583333) (setq a11 195.4166666) (setq a10 49.0) (setq a25 156.25) (setq a24 -351.5625) (setq a23 630.2083333) (setq a22 -143.4375) (setq a21 -291.4583333) (setq a20 28.0) (setvar "pdmode" 2) (command "point" (list 49.0 28.0)) (command "point" (list 105.3 -31.5)) (command "point" (list 172.3 -78.6)) (command "point" (list 211.1 -95.8)) (command "point" (list 183.0 -66.1)) (command "point" (list 49.0 28.0)) (setq u 0) (setq du 0.01) (setq file1 (open "c:\\mydata1.txt" "w")) (while (<= u 1.0) (setq x1 (+ (* (expt u 5) a15) (* (expt u 4) a14) (* (expt u 3) a13) (* (expt u 2) a12) (* u a11) a10)) (setq y1 (+ (* (expt u 5) a25) (* (expt u 4) a24) (* (expt u 3) a23) (* (expt u 2) a22) (* u a21) a20)) (if (or (<= (abs (- u 0)) 0.00001) (<= (abs (- u 0.2)) 0.00001) (<= (abs (- u 0.4)) 0.00001) (<= (abs (- u 0.6)) 0.00001) (<= (abs (- u 0.8)) 0.00001) (<= (abs (- u 1.0)) 0.00001)) (print (list x1 y1) file1) ) (setq u (+ u du)) (setq x2 (+ (* (expt u 5) a15) (* (expt u 4) a14) (* (expt u 3) a13) (* (expt u 2) a12) (* u a11) a10)) (setq y2 (+ (* (expt u 5) a25) (* (expt u 4) a24) (* (expt u 3) a23) (* (expt u 2) a22) (* u a21) a20)) (command "line" (list x1 y1) (list x2 y2)) (command) ) (print (list x2 y2) file1) (close file1) ) 2.5 Таблица, получаемая в результате выполнения задания: (49.0 28.0) вектор отклоненией- (0,0) (105.3 -31.5) вектор отклоненией- (0,0) (172.3 -78.6) вектор отклоненией- (0,0) (211.1 -95.8) вектор отклоненией- (0,0) (182.0 -67.1) вектор отклоненией- (1,1) (49.0 28.0) вектор отклоненией- (0,0) 2.6 Рисунок с экрана 2.7 Вывод Из таблицы делаю вывод, что из-за аппаратного представления действительных чисел возможны небольшие погрешности на больших расстояниях, проходимых точкой по кривой. Задание № 3 Методы конструирования кривых. 3.1 Цель работы Выработка практических навыков конструирования кривых. 3.2 Индивидуальное задание Сконструировать кривую по заданным точкам методом Безье. Создать функцию рисующую кривую и характеристическую ломанную. Оформить таблицу значений функции и отклонений от заданных значений в опорных точках.
найдем аппроксимирующие многочлены Бернштейна: J50=(1-u)5; J51=5u(1-u)4; J52=10u2(1-u)3; J53=10u3(1-u)2 J54=5u4(1-u); J55=u5; Теперь есть все данные для построения кривой Безье по заданным точкам, причем она, не смотря на совпадение первой и последней точек, не будет замкнуто сопряжена, так как предпоследняя и вторая точка не лежат на одной прямой. 3.5 Программа для построения кривой Безье. (defun Bezier_curve() (command "erase" "all" "") (setvar "pdmode" 2) (setq p1 (list 49.0 28.0)) (setq p2 (list 105.3 -31.5)) (setq p3 (list 172.3 -78.6)) (setq p4 (list 211.1 -95.8)) (setq p5 (list 183.0 -66.1)) (setq p6 (list 49.0 28.0)) (command "color" 3) (command "point" p1) (command "point" p2) (command "point" p3) (command "point" p4) (command "point" p5) (command "point" p6) (command "color" 4) (command "line" p1 p2 p3 p4 p5 p6) (command) (command "color" 5) (setq u 0) (setq du 0.001) (setq file1 (open "c:\\mydata2.txt" "w")) (while (<= u 1.0) (setq x (+ (* (nth 0 p1) (expt (- 1 u) 5)) (* (nth 0 p2) (expt (- 1 u) 4) u 5) (* (nth 0 p3) (expt (- 1 u) 3) u u 10) (* (nth 0 p4) (expt (- 1 u) 2) u u u 10) (* (nth 0 p5) (expt u 4) (- 1 u) 5) (* (nth 0 p6) (expt u 5)))) (setq y (+ (* (nth 1 p1) (expt (- 1 u) 5)) (* (nth 1 p2) (expt (- 1 u) 4) u 5) (* (nth 1 p3) (expt (- 1 u) 3) u u 10) (* (nth 1 p4) (expt (- 1 u) 2) u u u 10) (* (nth 1 p5) (expt u 4) (- 1 u) 5) (* (nth 1 p6) (expt u 5)))) (if (or (<= (abs (- u 0)) 0.00001) (<= (abs (- u 0.2)) 0.00001) (<= (abs (- u 0.4)) 0.00001) (<= (abs (- u 0.6)) 0.00001) (<= (abs (- u 0.8)) 0.00001) (<= (abs (- u 1.0)) 0.00001)) (print (list x y) file1) ) (setq u (+ u du)) (setq x1 (+ (* (nth 0 p1) (expt (- 1 u) 5)) (* (nth 0 p2) (expt (- 1 u) 4) u 5) (* (nth 0 p3) (expt (- 1 u) 3) u u 10) (* (nth 0 p4) (expt (- 1 u) 2) u u u 10) (* (nth 0 p5) (expt u 4) (- 1 u) 5) (* (nth 0 p6) (expt u 5)))) (setq y1 (+ (* (nth 1 p1) (expt (- 1 u) 5)) (* (nth 1 p2) (expt (- 1 u) 4) u 5) (* (nth 1 p3) (expt (- 1 u) 3) u u 10) (* (nth 1 p4) (expt (- 1 u) 2) u u u 10) (* (nth 1 p5) (expt u 4) (- 1 u) 5) (* (nth 1 p6) (expt u 5)))) (command "line" (list x y) (list x1 y1)) (command) ) (close file1) ) 3.5 Таблица, получаемая в результате выполнения задания: (49.0 28.0) вектор-отклонение (0 0) (106.469 -25.1437) вектор-отклонение (-1.169 -6.063) (153.844 -60.0138) вектор-отклонение (18.454 -18.5862) (172.487 -68.3062) вектор-отклонение (38,613 -27.4938) (143.758 -41.7363) вектор-отклонение (39,242 -24.3637) (49.6689 27.5301) вектор-отклонение (-0.6689 0.4699) При точности аппроксимации du=0.001. 3.6 Рисунок с экрана3.7 ВыводАппроксимация метод Безье дает большую погрешность, чем параметрическая сплайн-аппроксимация, но прим увеличении шага параметра увеличивается время вычислений и точность аппроксимации. |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |