Рассмотрим случай уменьшения размеров фигуры делением ее сторон.
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.