Содержание


Содержание 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п