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