unit Lab6V2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
//=============================================================================//
TDot = Class(TObject)
private
X,Y:integer;
R:integer;
Color:COLORREF;
public
procedure init(Xo,Yo,Ro:integer; CR:colorref);
Procedure Draw;
end;
//=============================================================================//
TVec = class(TObject)
private
X,Y:integer;
R:Integer;
Color:Colorref;
public
procedure init(A,B:TDot; D:Integer; Cr:colorref);
procedure Draw(A:TDot);
procedure Rotate(A:TVec; f:real);
Procedure EndVector(A:TDot; Var B:TDot);
end;
//=============================================================================//
Tmain = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
A,B,C:TDot;
AB,AC,BC:TVEc;
Count:Integer;
public
end;
//=============================================================================//
var
main: Tmain;
implementation
{$R *.dfm}
//=============================================================================//
Procedure TDot.init(Xo,Yo,Ro:integer; Cr:COLORREF);
begin
X:=Xo; Y:=Yo; R:=Ro; Color:=Cr;
end;
//=============================================================================//
Procedure TDot.Draw;
begin
main.Canvas.Brush.Color:=Color;
main.Canvas.Pen.Color:=Color;
main.Canvas.Ellipse(X-R, Y-R, X+R, Y+R);
end;
//=============================================================================//
procedure Tvec.init(A,B:TDot; D:integer; Cr:COLORREF);
begin
X:=B.X - A.X; Y:=B.Y - A.Y;
R:=D; Color:=Cr;
end;
//=============================================================================//
procedure Tvec.Draw(A:Tdot);
begin
Main.Canvas.Pen.Color:=Color;
main.Canvas.Pen.Width:=R;
main.Canvas.MoveTo(A.X, A.Y);
main.Canvas.LineTo(A.X+X, A.Y+Y);
end;
//=============================================================================//
procedure TVec.Rotate(A:TVec; f:real);
begin
x:=round(a.X*Cos(F)-a.Y*Sin(F));
y:=round(a.X*Sin(F)+a.Y*Cos(F));
end;
//=============================================================================//
procedure Tvec.EndVector(A:Tdot; var B:Tdot);
begin
B.X:=A.X+X;
B.Y:=A.Y+Y;
end;
//=============================================================================//
procedure Tmain.FormCreate(Sender: TObject);
begin
A:=Tdot.Create; B:=Tdot.Create; C:=Tdot.Create;
AB:=Tvec.Create; AC:=Tvec.Create; BC:=Tvec.Create;
count:=1;
end;
procedure Tmain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if count mod 2 = 1 then
A.init(X,Y,2,RGB(0,0,255))
else
begin
B.init(X,Y,2,RGB(0,0,255));
AB.init(A,B,4,RGB(255,255,0));
Ab.Draw(A);
AC.init(A,B,4,RGB(255,255,0));
AC.Rotate(AB, Pi/3);
AC.Draw(A);
C.init(X,Y,2,RGB(0,0,255));
AC.EndVector(A,C);
BC.init(B,C,4,RGB(255,255,0));
BC.Draw(b);
end;
A.Draw;
B.Draw;
C.Draw;
Count:=Count+1;
end;
end.