Масштабирование фигуры.

Рассмотрим случай уменьшения размеров фигуры делением ее сторон.

 

N:= 7; R:= 170; xc:= GetMaxX div 2; yc:= GetMaxY div 2;

for i:= 1 to N do begin alfa:= i*2. *pi/N;

x[i]:= xc + round(R*cos(alfa));{ координаты вершин }

y[i]:= yc + round(R*sin(alfa)) { исходного N-угольника }

end;

MoveTo(x[N], y[N]);

for i:= 1 to N do LineTo(x[i], y[i]);{ рисуем N-угольник }

ch:= ReadKey;{ нажать клавишу }

Repeat{ найдем середины сторон многоугольника

и запишем их в массивы новых координат многоугольника }

x1:= x[1]; y1:= y[1];

for i:=1 to N-1 do begin x[i]:= (x[i]+x[i+1]) div 2;

y[i]:= (y[i]+y[i+1]) div 2 end;

x[N]:= (x[N]+x1) div 2;

y[N]:= (y[N]+y1) div 2;

{ строим многоугольник по новым точкам }

MoveTo(x[N], y[N]);

for i:=1 to N do LineTo(x[i], y[i]);

ch:=ReadKey;{ нажать клавишу }

Until ch=#27;

 
 


При нажатии клавиши внутрь фигуры будет "убегать" ее уменьшенная копия до нажатия клавиши Esc. Стороны можно делить не пополам, а в каком-либо соотношении. Для стирания фигуры необходимо перерисовать ее в режиме XorPut.

Масштабирование фигур можно проводить используя зависимости, приведенные выше для вращения фигуры относительно своего "центра", изменяя Kx и Ky, при постоянных параметрах xf, yf, A.