Энциклопедия Turbo Pascal. Главы 9-11 - Увеличение масштаба изображения

ОГЛАВЛЕНИЕ

Увеличение масштаба изображения

Созданием окон с различными координатами вы можете добиться эффекта увеличения масштаба графического отображения. Рассмотрим следующее предложение для рисования линии:

    DrawLine(0, 0, 100, 100); 

Если активная планета, в которой рисуется данная линия, задана следующим образом

    DefineWorld(1, 0, 0, 100, 100); 

то линия будет идти диагонально из одного угла в другой. Однако, если планета будет задана, как

    DefineWorld(1, 0, 0, 200, 200); 

то та же самая линия будет проходить половину дистанции из одного угла в другой. Графические объекты будут всегда заполнять экран в пропорции к системе координат планеты. В большей планете объект будет выглядеть меньше, а в меньшей будет выглядеть больше.

Следующая программа создает эффект увеличения масштаба изображения в углу квадрата. Вывод программы показан на рис.10-6.

    ------------------------------------------------------
    --------------¬
    L-------------
    --------------¬
    ¦---¬         ¦
    ¦¦  ¦         +------------¬
    ¦L---         +------------
    ¦
                  +------------¬
    ¦             ¦ ------¬    ¦
    ¦             ¦ ¦     ¦    +------------¬
    L-------------+ ¦     ¦    +------------
                  ¦ L------    +------------¬
                  ¦            ¦  ----------+
                  ¦            ¦  ¦         ¦
                  L------------+  ¦         ¦
                               ¦            ¦
                               ¦  ¦         ¦
                               ¦  ¦         ¦
                               L--+----------

 

Рис.10-6. Эффект увеличения масштаба изображения за счет использования окна

    program Windows;

    {Si typedef.sys}
    {Si graphix.sys}
    {Si kernel.sys}
    {Si windows.sys}

    var
      i: integer;

    procedure SetUpWindow;
    begin

      DefineWindow(1, 0, 0, 20, 100);
      DefineHeader(1, 'Sguare');
      DefineWorld(1, 0, 0, 400, 400);
      SelectWorld(1);
      SelectWindow(1);
      SetHeaderOn;
      SetBackground(0);
      DrawBorder;

      DefineWindow(2, 20, 40, 40, 140);
      DefineHeader(2, 'Zoom in a little');
      DefineWorld(2, 0, 0, 200, 200);
      SelectWorld(2);
      SekectWindow(2);
      SetHeaderOn;
      SetBackground(0);
      DrawBorder;

      DefineWindow(3, 40, 80, 60, 180);
      DefineHeader(3, 'Ah...much clearer');
      DefineWorld(3, 0, 0, 100, 100);
      SekectWorld(3);
      SelectWindow(3);
      SetHeaderOn;
      SetBackground(0);
      DrawBorder;
    end;

    begin
      InitGraphic;
      SetUpWindow;

      {появиться для увеличения в углу}
      for i: = 1 to 3 do
      begin
       SelectWorld(1);
       SelectWindow(1);
       DrawSguare(10, 10, 120, 120, false);
       DrawLine(10, 10, 20, 20);
      end;
      repeat until KeyPressed;
      LeaveGraphic;
    end.