Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа «Отсечение невидимых частей плоских фигур»
Напомним материал лекций.
«ОТСЕЧЕНИЕ ЛИНИЙ
Предположим, что мировые и экранные координаты одинаковые, то есть совпадают
Y R
Ymax D P Q C
P PPP
Ymin
A B
O X min Xmax X
На рисунке показан прямоугольник ABCD, который является окном. В видимые отрезки и линии должны лежать внутри окна. То есть при вычерчивании отрезка прямой линии части, лежащие вне окна, должны быть отсечены. Процесс отсечения должен выполняться автоматически.
На рисунке прямоугольник ABCD вычерчивается раньше, чем треугольник PQR, так что вместо этого треугольника надо вычертить ломаную PPQQ.
Поскольку заданы только три точки P, Q и R, координатная пара (xp, yp) должна быть вычислена из значений координат точек (xp, yp) и (xR,yR).Из рисунка видно, что наклон отрезка PR можно вычислить двумя способами, что приводит к следующему уравнению
Совмещая это с соотношением
yp = ymax
получим
xp = xp +
Отсюда легко вычисляются координаты точки P, если известно, что концевая точка Р находится внутри окна, а другая концевая точка R (xR, yR) удовлетворяет неравенствам
xmin < xR < xmax
yR > xmax
Однако необходимо рассмотреть значительно больше ситуаций. Представим их в таблице
1001 |
0001 |
0101 |
1000 |
0000 |
0100 |
1010 |
0010 |
0110 |
В этой таблице с любой точкой P (x, y) ассоциируется четырехбитовый код
b3b2b1b0, где bi т быть либо 0, либо 1.
Запишем значения битов используя выражения языка Pasxal
b3 = (x < xmin)
b2 = (x > xmax)
b1 = (y < ymin)
b0 = (y > ymax)»
Для удобства перепишем последнюю таблицу с упрощенной нумерацией частей плоскости
1 |
2 |
3 |
4 |
0 |
5 |
6 |
7 |
8 |
Теперь составим алгоритм.
Первый шаг алгоритма, составим уравнения прямых образующих окно.
Второй шаг алгоритма определим части плоскости, в которых находятся концы отрезка и зададим эти варианты.
Для удобства перепишем эти пары таким образом, чтобы на первом месте стоял меньший номер.
Очевидно, что отрезок, определяемой парой 00 целиком лежит в окне, то есть весь отрезок видимый
Отрезки, определяемые парами 11, 12, 13, 14, 16, 22, 33, 35, 38, 44, 46, 55, 58, 66, 67, 68, 77, 78 и 88 заведомо лежат вне окна и не видны.
Пары 02, 04, 05 и 07 могут иметь пересечение только с одной прямой и видимую часть отрезка определить заведомо легко от точки лежащей в области 0 до пересечения прямой задающий отрезок, со стороной окна. (На самом деле, прямая определяемая отрезком, будет иметь два пересечения со сторонами окна, но одна из точек пересечения принадлежит отрезку, а вторая лежит вне отрезка).
Пары точек 01, 03, 06 и 09 могут иметь пересечение с двумя прямыми составляющими границы окна, надо найти обе точки пересечения, одна из них лежит на границе окна, другая за пределами окна (исключением могут быть углы окна). Надо определить какая точка лежит на границе окна и построить соответствующий отрезок.
По аналогии надо рассмотреть случаи 15, 17, 18, 24, 25, 26. 28, 34, 36, 47 и 48.
Для каждого из этих случаев надо составить свою процедуру, предварительно составив таблицу по образцу
Случай |
Прямые которые может пересечь отрезок (Верхняя горизонтальная Ув, Нижняя горизонтальная Ун, Левая вертикальная Хл, Правая вертикальная Хп) |
18 |
Хл, Ув, Хп, Ун |
Процедуры необходимо собрать в программу и отладить работу программы, для чего составить набор тестов, каждый из которых, соответствует определенной ситуации. Тесты собрать в таблицу
Случай |
Ситуация Отрезок пересекает окно по линиям |
Координаты углов окна |
Координаты концов отрезка |
Координаты точек пересечения |
18 |
Хл и Ун |
|||
Ув и Хп |
Для зачета работы представить показать работоспособность программы, текст программы, представить набор тестов, ответить на вопросы по тексту программы и по набору тестов.