49 lines
1.1 KiB
ObjectPascal
49 lines
1.1 KiB
ObjectPascal
// Класс штампа правильного многоугольника
|
|
uses GraphABC;
|
|
|
|
type
|
|
RegularPolygonStamp = class
|
|
x,y,r: real;
|
|
n: integer;
|
|
constructor (xx,yy,rr: real; nn: integer);
|
|
begin
|
|
x := xx; y := yy;
|
|
r := rr; n := nn;
|
|
end;
|
|
procedure Stamp;
|
|
begin
|
|
var t := 0.0;
|
|
var xr := r*cos(t);
|
|
var yr := r*sin(t);
|
|
MoveTo(Round(x + xr),Round(y + yr));
|
|
for var i:=1 to n do
|
|
begin
|
|
t += 2*Pi/n;
|
|
xr := Round(r*cos(t));
|
|
yr := Round(r*sin(t));
|
|
LineTo(Round(x + xr),Round(y + yr));
|
|
end;
|
|
end;
|
|
procedure MoveOn(dx,dy: real);
|
|
begin
|
|
x += dx; y += dy;
|
|
end;
|
|
function Clone: RegularPolygonStamp;
|
|
begin
|
|
Result := new RegularPolygonStamp(x,y,r,n);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
var r := new RegularPolygonStamp(Window.Center.X,Window.Center.Y,50,6);
|
|
r.Stamp;
|
|
var t := 2*Pi/12;
|
|
var rr := r.r*sqrt(3)+10;
|
|
for var i:=1 to 6 do
|
|
begin
|
|
var r1 := r.Clone;
|
|
r1.MoveOn(rr*cos(t),rr*sin(t));
|
|
r1.Stamp;
|
|
t += 2*Pi/6;
|
|
end;
|
|
end. |