Содержание
Содержание 2
ЗАДАНИЕ 1. Простой алгоритм двумерного отсечения. 3
Листинг программы 7
ЗАДАНИЕ 3. Рисование линий по алгоритму Брезенхема. 8
Листинг программы 8
Задание 4 Рисование блок-схемы 9
ЛИСТИНГ ПРОГРАММЫ РАЗБИЕНИЯ МНОГОУГОЛЬНИКОВ 13
Список литературы 17
ЗАДАНИЕ 1. Простой алгоритм двумерного отсечения.
Р1 , Р2 - концевые точки отрезка
Р1' , Р2'- концевые точки видимой части отрезка
xл, xп , yв , y н - координаты левой, правой, верхней и нижней сторон окна
Флаг - признак видимости, равный: 0, видимость; - 1, невидимость
вычисление кодов концевых точек
занесение этих кодов в два массива Т1код и Т2код, размерностью 1 х 4 каждый
для первого конца: Р1
if x1 < xл then Т1код(4) = 1 else Т1код(4) = 0
lf x1 > xп then Т1код(3) = 1 else Т1код(3) = 0
If y1 < yн then Т1код(2) = 1 else Т1код(2) = 0
If y1 > yв then Т1код(1) = 1 else Т1код(1) = 0
для второго конца: Р2
if x2 < xл then Т2код(4) = 1 else Т2код(4) = 0
lf x2 > xп then Т2код(3) = 1 else Т2код(3) = 0
If y2 < yн then Т2код(2) = 1 else Т2код(2) = 0
If y2 > yв then Т2код(1) = 1 else Т2код(1) = 0
инициализация признака видимости и видимых концевых точек
инициализация т очень большим числом, имитирующим бесконечный наклон
Флаг = 0
Р1' = Р1
Р2' = Р2'
m = Большое число
проверка полной видимости отрезка
Сумма1 = 0
Сумма2 = 0
for i = 1 to 4
Сумма1 = Сумма1 + Т1код(i)
Сумма2 = Сумма2 + Т2код(i)
next i
if Сумма1 = 0 and Сумма2 = 0 then 7
отрезок не является полностью видимым
проверка случая тривиальной невидимости
вычисление логического произведения (Произвед) кодов концевых точек отрезка
Произвед = 0
for i = 1 to 4
Произвед = Произвед + Целая часть ((Т1код(i)) + Т2код(i)/2)
If Произвед < > 0 then
Флаг = - 1
go to 7
end if
next i
отрезок может быть частично видимым проверка попадания первой точки внутрь окна
if Сумма1 = 0 then
Номер = 1
Р1' = Р1
P = Р2
go to 2
end if
проверка попадания второй точки внутрь окна
if Сумма2 = 0 then
Номер = 2
Р1' = Р2
P = Р1
go to 2
end if
внутри окна нет концов отрезка
инициализация номера конца отрезка
Номер == 0
1 if Номер < > 0 then Р'номер = Р
Номер = Номер + 1
if Номер > 2 then 7
P = Рномер
проверка пересечения с левым краем проверка вертикальности отрезка
2 if (x2 - x1 ) = 0 then 4
m = (y2 - y1 )/ (x2 - x1 )
if xл < Px then 3
у = m * (xл - Px) + Py
if y < yв then 3
if y < yн then 3
обнаружено корректное пересечение
Py = y
Px = xл
gо to 1
проверка пересечения с правым краем
3 if xп > Рx then 4
у = m * (хп - Рx) + Рy
if y < yв then 4
if y < yн then 4
обнаружено корректное пересечение
Py = y
Px = xп