Энциклопедия 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.