Консультация № 175868
06.01.2010, 21:31
0.00 руб.
0 0 0
Здравствуйте уважаемыеэксперты.
Помогите мне пожалуйста написать текст программы:

Нарисовать на экране примитивный рисунок (т.е упрощенный). Наложить на него рамку и отсечь все выходящие за нее детали. Пользователь должен видеть:
• исходную картинку;
• затем он задает размеры окна;
• и получает усеченный рисунок.
Для получения усеченного рисунка применить метод Коэна-Созерленда.

Приложение:
Procedure CLIP(x1,x2,y1,y2,xmin,xmax,ymin,ymax: real);
Type outcode = array[1..4] of boolean;
Var accept,reject,done: boolean;
outcode1,outcode2,
outcode3,outcode4:outcode;{коды вне/внутри}
begin
accept:= false; reject:= false;
done:= false;
repeat
Outcodes(x1,y1,outcode1);
Outcodes(x2,y2,outcode2);{проверка на отбрасывание}
reject:=Reject_Check(outcode1,outcode2); if reject then done:= true
else
begin {возможно принятие целиком}
accept:=Accept_Check(outcode1,outcode2);
if accept then done:=true
else
begin {разделить отрезок}
{если P1 внутри, то с помощью SWAP сделать снаружи}
if not((outcode1[1])or(outcode1[2])or
(outcode1[3])or(outcode1[4])) then SWAP;
{теперь P1 перемещается в точку пересечения}
if outcode1[1] then
begin {отбросить верхнюю часть}
x1:=x1+(x2-x1)*(ymax-y1)/(y2-y1);
y1:=ymax; end
else if outcode1[2] then
if outcode1[1] then
begin {отбросить нижнюю часть}
x1:=x1+(x2-x1)*(ymin-y1)/(y2-y1);
y1:=ymin; end
else if outcode1[3] then
begin {отбросить правую часть}
y1:=x1+(y2-y1)*(ymax-x1)/(x2-x1);
x1:=xmax; end
else if outcode1[4] then
begin {отбросить левую часть}
y1:=x1+(y2-y1)*(ymin-x1)/(x2-x1);
x1:=xmin;
end; end; end;
until done;
if accept then Line(x1,y1,x2,y2); {нарисовать отрезок} end;{procedure}


//вот кое что есть,но этого мало.Очень вас прошу помочь.

Обсуждение

Форма ответа