Вот основная программ:
uses Graph;
type
TTrap = record
x, y, a, b, h: integer;
end;
function InitGraphMode: boolean;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,' ');
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
InitGraphMode := false;
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end
else
InitGraphMode := true;
end;
procedure DrawTrapecia(ATrap: TTrap; c: integer);
var
d: integer;
x_: integer;
begin
setcolor©;
d := (ATrap.a - ATrap.b) div 2;
if d > 0 then
x_ := ATrap.x + d
else
x_ := ATrap.x;
moveto(x_, ATrap.y);
lineto(x_ + ATrap.b, ATrap.y);
if d > 0 then
x_ := ATrap.x + ATrap.a
else
x_ := ATrap.x + ATrap.a - d;
lineto(x_, ATrap.y + ATrap.h);
lineto(x_ - ATrap.a, ATrap.y + ATrap.h);
lineto(x_ - ATrap.a + d, ATrap.y);
end;
function Max(t1, t2: integer): integer;
begin
if t1 >= t2 then
Max := t1
else
Max := t2;
end;
procedure LineTrapFill(ATrap: TTrap; l, c: integer);
var
w, d, x1, x2, f: integer;
begin
w := Max(ATrap.a, ATrap.b);
d := abs(ATrap.a - ATrap.b) div 2;
f := l * d div ATrap.h;
if ATrap.a > ATrap.b then
f := d - f;
x1 := ATrap.x + f;
x2 := ATrap.x + w - f;
setcolor©;
MoveTo(x1, ATrap.y + l);
LineTo(x2, ATrap.y + l);
end;
procedure TrapFill(ATrap: TTrap);
var
i: integer;
begin
for i := 0 to ATrap.h - 1 do
begin
LineTrapFill(ATrap, i, 14);
end;
end;
var
Trap: TTrap;
begin
if InitGraphMode then
begin { Do graphics }
with Trap do
begin
x := 200;
y := 200;
a := 300;
b := 200;
h := 100;
end;
DrawTrapecia(Trap, 4);
TrapFill(Trap);
Readln;
CloseGraph;
end;
end.
это процедура для закрашивания трапеции
procedure TrapFill(ATrap: TTrap);
var
i: integer;
begin
for i := 0 to ATrap.h - 1 do
begin
LineTrapFill(ATrap, i, 14);
end;
end;
у меня такой вопрос : что добавить в эту процедуру закрашивания , чтобы трапеция закрашивалась разными цветами
?????
( у меня такая мысль : добавить i mod 16, но не знаю куда....)
Сообщение отредактировано: 18192123 -