ΠΠΎΠΏΡΡΡΠΈΠΌ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΡΠ³ΠΎΠ² ΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΈΡΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΡΡΠ³, ΠΎΠ½ ΠΊΠ»Π°Π΄ΡΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² Circles: array of TCircle, Π° ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΠΎΠ½ ΠΊΠ»Π°Π΄ΡΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² Rectangles: array of TRectangle.
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡβΠ»ΠΈ Π·Π°Π΄Π°Π½Π½Π°Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ²Π΅ΡΡΠΈΠ» ΠΊΠ»ΠΈΠΊ ΠΌΡΡΠΈ ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΠ², Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠΊΠ½ΡΠ»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ.
ΠΠ°Π²Π΅Π΄ΡΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ HitTest, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ True Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° ΠΈ False Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅:
type
TCircle = class(TObject)
public
X: Integer;
Y: Integer;
D: Integer;
function HitTest(aX, aY: Integer): Boolean;
end;
type
TRectangle = class(TObject)
public
X1: Integer;
Y1: Integer;
X2: Integer;
Y2: Integer;
function HitTest(X, Y: Integer): Boolean;
end;
function TCircle. HitTest(aX, aY: Integer): Boolean;
begin
Result:= Sqrt(Sqr(X β aX) + Sqr(Y β aY)) <= D;
end;
function TRectangle. HitTest(X, Y: Integer): Boolean;
begin
Result:= (X1 <= X) and (X <= X2) and (Y1 <= Y) and (Y <= Y2);
end;
ΠΡΠΎ Π±ΡΠ»Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π° ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ HitTest, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠ΅ Π½Π°ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ:
var
Circles: array of TCircle;
Rectangles: array of TRectangle;
function HitTest(X, Y: Integer): Boolean;
var
I: Integer;
begin
Result:= False;
for I:= 0 to Length(Rectangles) β 1 do
begin
Result:= Rectangles[I].HitTest(X, Y);
if Result then
Exit;
end;
for I:= 0 to Length(Circles) β 1 do
begin
Result:= Circles[I].HitTest(X, Y);
if Result then
Exit;
end;
end;
ΠΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ. Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² Ρ Π½Π°Ρ Π΄Π΅ΡΡΡΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΡΠ½ΠΈ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΡΠΆΠ΅Π½ ΡΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΈ ΡΠ²ΠΎΠΉ ΡΠΈΠΊΠ» Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ HitTest? ΠΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅.
Π ΡΡΠΌ ΡΡΡ ΡΠΌΡΡΠ»? ΠΠΌΠ΅ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΌΡ Π·Π°Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ², Π½Π°Π·ΠΎΠ²ΡΠΌ Π΅Π³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, TShape. ΠΠ°Π»Π΅Π΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ Π½Π°ΡΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΈΡ ΡΠΈΠΏΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Β«Shapes: array of TShapeΒ». ΠΠΎ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ Ρ Π½Π°Ρ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠ³Π½ΡΡΡΡ, ΡΡΠΎ ΡΠΈΠΏΡ Π½Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π½Π°ΡΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΈ ΠΊΡΡΠ³ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ² TShape, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ°ΠΌΠ΅Π½ΠΈΠΌ TObject Π½Π° TShape Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°:
type
TShape = class(TObject)
end;
TCircle = class(TShape)
public
β¦..
end;
TRectangle = class(TShape)
public
β¦..
end;
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°Ρ ΠΊΡΡΠ³ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΊΡΡΠ³ ΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ², ΡΠ°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈ ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅. Π§ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ? Π’ΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ TCircle, Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ ΠΊΠ»Π°ΡΡΠ° TShape ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ TShape. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° TShape (ΠΊΡΠΎΠΌΠ΅ private) Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ TCircle.
ΠΠ΅ Π±ΡΠ΄Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΡΠ΅ΠΎΡΠΈΡ, Π²ΡΡβΡΠ°ΠΊΠΈ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΎΠ±ΡΡΡΠ½ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ ΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΏΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ Π½Π΅Ρ ΠΈΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ:
var
Shapes: array of TShape;
function HitTest(X, Y: Integer): Boolean;
var
I: Integer;
begin
Result:= False;
for I:= 0 to Length(Shapes) β 1 do
begin
if Shapes[I] is TCircle then
Result:= (Shapes[I] as TCircle).HitTest(X, Y)
else if Shapes[I] is TRectangle then
Result:= (Shapes[I] as TRectangle).HitTest(X, Y)
if Result then
Exit;
end;
end;
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΎΠΆΠ΅ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΎ. ΠΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡβΠ»ΠΈ ΠΎΠ½ Π½ΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ ΡΠΈΠΏ (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ is) ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ as). ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ is ΠΈ as ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
Π§ΡΠΎΠ±Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΌΠΎΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΠΌ ΠΎΡΡΠ°Π»ΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³. Π ΠΊΠ»Π°ΡΡ TShape Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΡΠΎΠΊΡ Β«function HitTest(X, Y: Integer): Boolean; virtual; abstract;β, Π° Π² ΠΊΠ»Π°ΡΡΡ TCircle ΠΈ TRectangle Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΡΠ»Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΡΡΠΎΡΠ΅ΠΊ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ override:
type
TShape = class(TObject)
public
function HitTest(X, Y: Integer): Boolean; virtual; abstract;
end;
TCircle = class(TShape)
public
β¦..
function HitTest(X, Y: Integer): Boolean; override;
end;
TRectangle = class(TShape)
public
β¦..
function HitTest(X, Y: Integer): Boolean; override;
end;
Π§ΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ? ΠΡ ΠΊΠ°ΠΊ Π±Ρ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ TShape Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΠΎΠΏΠ°Π»ΠΈ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π½ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. Π’ΠΎ Π΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΅ΡΡΡ, Π½ΠΎ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΊΠ»Π°ΡΡΠ°Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Ρ .
ΠΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠ°Π΄Π°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
var
Shapes: array of TShape;
function HitTest(X, Y: Integer): Boolean;
var
I: Integer;
begin
Result:= False;
for I:= 0 to Length(Shapes) β 1 do
begin
Result:= Shapes[I].HitTest(X, Y);
if Result then
Exit;
end;
end;
ΠΡΠΈ ΡΡΠΎΠΌ, Π² ΡΠ»ΡΡΠ°Ρ ΠΊΡΡΠ³ΠΎΠ², Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ TCircle. HitTest, Π° Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² β TRectangle. HitTest.
ΠΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΠ΄Π½ΠΎΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π²ΡΠΈΠ³ΡΡΡΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½, Π½ΠΎ Π²Π΅Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ:
TShape. Move(dx, dy: Integer); virtual; abstract;
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°,
TShape. Rotate(x, y: Integer; angel: Double); virtual; abstract;
Π΄Π»Ρ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° Π²ΠΎΠΊΡΡΠ³ ΡΠΎΡΠΊΠΈ,
TShape. Flip(Line: TLine); virtual; abstract;
Π΄Π»Ρ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΠΎΠΊΡΡΠ³ ΠΏΡΡΠΌΠΎΠΉ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΌΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊΠΎ Π²ΡΠ΅ΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌ.