Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Алгоритъм на Коен - Съдърленд за изрязване на отсечки


Информационни технологии | 2009-12-04 | 162 сваляния

Алгоритъм на Коен - Съдърленд за изрязване на отсечки

{ Процедура за изрязване на отсечка със зададени координати на крайните й точки P1=(X1,Y1) и P2=(X2,Y2) от прозорец с координати на горния ляв ъгъл (Xmin,Ymin) и на долния десен (Xmax,Ymax) }


procedure Clipper(X1,Y1, X2,Y2, Xmin,Ymin, Xmax,Ymax: real);

type OutCode : array[1..4] of boolean; { true е вън от прозореца }

var Accept, Reject, Done : boolean;

{ Флагове за тривиално приемане, отхвърляне на отсечка и за край }

OutCode1, OutCode2 : OutCode;{ Кодове за точките P1 и P2 }

procedure Swap;

{ Разменя стойностите на P1 и P2 }

function AcceptTest(OutCode1, OutCode2 : OutCode) : boolean;

{ Проверка за тривиално приемане на отсечка }

function RejectTest(OutCode1, OutCode2 : OutCode) : boolean;

{ Проверка за тривиално отхвърляне на отсечка }

procedure OutCodes(X,Y : real; var OutCodeXY : OutCode);

{ Определя кода на точка с координати (X,Y) }


begin { Clipper }

Accept := false; Reject := false; Done := false;

repeat

OutCodes(X1, Y1, OutCode1);

OutCodes(X2, Y2, OutCode2);

Reject := RejectTest(OutCode1, OutCode2);

if Reject then Done := true

else { Възможно е тривиално приемане }

begin

Accept := AcceptTest(OutCode1, Outcode2);

if Accept then Done := true

else { Отсечката се дели }

begin

{ Ако P1 е вътре в прозореца, размяна на P1 и P2 }

if not (OutCode1[1] or OutCode1[2] or

OutCode1[3] or OutCode1[4])

then Swap;

{ P1 се премества в точката на пресичане. }

{ Използват се формули: }

{ y = y1 + m*(x-x1) и x = x1 + (1/m)*(y-y1) }

if OutCode1[1] then

begin { Изрязване по y=Ymax }

X1 := X1 + (X2-X1) * (Ymax-Y1)/(Y2-Y1);

Y1 := Ymax; end

else if OutCode1[2] then

begin { Изрязване по y=Ymin }

X1 := X1 + (X2-X1) * (Ymin-Y1)/(Y2-Y1);

Y1 := Ymin end

else if OutCode1[3] then

begin { Изрязване по x=Xmax }

Y1 := Y1 + (Y2-Y1) * (Xmax-X1)/(X2-X1);

X1 := Xmax end

else if OutCode1[4] then

begin { Изрязване по x=Xmin }

Алгоритъм на Коен - Съдърленд за изрязване на отсечки

Добави своя коментар:



Тагове от реферата: , , ,


Подобни материали


ДИСКОВА ОПЕРАЦИОННА СИСТЕМА (Disk Operating System - DOS) Информационни технологии | 2010-11-14 | 53 прочитания
Изследване ролята на дигиталните академични библиотеки Информационни технологии | 2010-11-14 | 122 прочитания
ПРИНЦИП НА ПЪРВИЯ РЪКОВОДИТЕЛ-¶¶¶-ТИ ПРИНЦИП Информационни технологии | 2010-11-14 | 37 прочитания
Въведение в структурите от данни Информационни технологии | 2010-11-14 | 33 прочитания
ООП Информационни технологии | 2010-11-14 | 90 прочитания
Изследване на трифазни изправители Информационни технологии | 2010-11-14 | 172 прочитания
Работа с ToolBook Информационни технологии | 2010-11-14 | 207 прочитания
Създаване на графики Информационни технологии | 2010-11-14 | 48 прочитания
Инсталиране на WINDOWS XP Информационни технологии | 2010-11-14 | 154 прочитания
Пример за обектно-ориентирана реализация на свързан стек Информационни технологии | 2010-11-14 | 68 прочитания