Помощь - Поиск - Пользователи - Календарь
Полная версия: закрашивание трапеции
Форум «Всё о Паскале» > 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(c);
  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(c);
  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, вместо того, чтобы записывать туда константы...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.