Основы компьютерной графики: Часть 1. Математический аппарат компьютерной графики. Казанцев А.В. - 45 стр.

UptoLike

Составители: 

ОСНОВЫ КОМПЬЮТЕРНОЙ ГРАФИКИ, часть 1 45
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}
ОСНОВЫ КОМПЬЮТЕРНОЙ ГРАФИКИ, часть 1                  45



 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}