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


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

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

 
Следующая статья »