Помощь - Поиск - Пользователи - Календарь
Полная версия: закрашивание трапеции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
18192123
задние такое: нарисовать равнобокую трапецию и закрасить её последовательно разными цветами.

Вот основная программ:


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, но не знаю куда....)
volvo
Можешь сделать
 LineTrapFill(ATrap, i,  i mod 14);
, например... Правда, такой бред должен будет получиться blink.gif
18192123
Цитата(volvo @ 11.12.2006 23:02) *

Можешь сделать
 LineTrapFill(ATrap, i,  i mod 14);
, например... Правда, такой бред должен будет получиться blink.gif

а как сделать, чтоб пользователь сам мог вводить размеры трапеции?
volvo
Перед инициализацией граф. режима запрашивай необходимые размеры, и записывай их в структуру Trap, вместо того, чтобы записывать туда константы...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.