x1, y1 – координаты верхнего левого угла прямоугольника;
x2, y2 – координаты нижнего правого угла прямоугольника;
a, b – коэффициенты масштабирования.
Алгоритм решения задачи:
Будем объект можно масштабировать - увеличивать
или уменьшать по осям координат. Масштабирование может производиться
относительно разных точек пространства. Например, относительно начала координат
или относительно любой координатной точки.
Если коэффициент масштабирования больше единицы, то объект увеличивается. Если
меньше 1, то объект будет уменьшен.
Новые координаты х и у определяются соотношением
х := kx * x;
у := ky * y,
kx и ky – коэффициенты масштабирования.
Программа на языке Паскаль АВС:
uses crt,graphABC;
var
g,h,i:integer;
x1,y1,x2,y2:integer;
a,b:real;
begin
x1:= 100;
y1:= 100;
x2:= 250;
y2:= 150;
rectangle(x1,y1,x2,y2);
a:= 1.01;
b:= 0.99;
for i:= 1 to 10 do begin
delay(1000);
rectangle(x1,y1,x2,y2);
x2:= round(x2*a);
y2:= round(y2*a);
rectangle(x1,y1,x2,y2);
end;
for i:= 1 to 40 do begin
delay(1000);
rectangle(x1,y1,x2,y2);
x2:= round(x2*b);
y2:= round(y2*b);
rectangle(x1,y1,x2,y2);
end;
end.
Примечания:
Т.к. координаты верхнего левого угла не меняются, то
прямоугольник увеличивается относительно именно этой точки.
Изменения графической информации основаны на трёх преобразованиях: перенос, поворот и масштабирование. Эти преобразования позволяют создавать динамические геометрические изображения. При этом при построении графического изображения на экране монитора необходимо помнить, что система координат для графического режима отличается от обычной декартовой системы координат: ось 0Y направлена вниз, ось 0X - вправо, так что начало координат находится в левом верхнем углу экрана.
Звёзды. uses GraphABC; var x, y, a:integer; begin SetWindowHeight(754); SetWindowWidth(1000); ClearWindow (clBlack); for a:=1 to 5000 do begin x:=random(1233); y:=random(1241); SetPixel(x,y,clYellow); end; end.
Program starsky; uses graphABC; var x,y,k:integer; begin ClearWindow (clPurple); for k:=1 to 5000 do begin x:=random(1003); y:=random(2345); SetPixel(x,y,clYellow); end; end.
uses GraphABC; var n, t, a:integer; begin SetWindowHeight(700); SetWindowWidth(1000); ClearWindow (clBlack); for a:=1 to 5000 do begin n:=random(7777); t:=random(4321); SetPixel(n,t,clWhite); end; end.
uses GraphABC; var x, y, a:integer; begin SetWindowHeight(800); SetWindowWidth(5000); ClearWindow (clBlack); for a:=1 to 5000 do begin x:=random(876); y:=random(480); SetPixel(x,y,clWhite); end; end.
uses GraphABC; var x, i, n:integer; begin SetWindowHeight(600); SetWindowWidth(5000); ClearWindow (clBlack); for n:=1 to 7000000 do begin x:=random(1777); i:=random(6890); SetPixel(x,i,clWhite); end; end.