- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

Calculating an angle from two points

Question:

How can I tell the given angle expressed by two points?

Answer:

The following example shows how to tell the angle of a 

given point from the coordinate 0, 0. In this example, the 

caption of the form shows the current point and angle from 

the center of the form. The y coordinates are inverted to 

show a more natural north orientation where north is 

directly up.



Example:



const RADTODEG = 180 / Pi;



function AngleOfPt(pt : TPoint) : double;

begin

  Result := 0;

  if ((Pt.x = 0) and (Pt.y < 0)) then

    Result := 270 else

  if ((Pt.x = 0) and (Pt.y > 0)) then

    Result := 90 else

  if ((Pt.x > 0) and (Pt.y >= 0)) then

    Result := ArcTan(Pt.y / Pt.x) * RADTODEG else

  if ((Pt.x < 0) And (Pt.y > 0)) then

    Result := 180 - (ArcTan(Pt.y / Abs(Pt.x))* RADTODEG) else

  if ((Pt.x < 0) And (Pt.y <= 0)) then

    Result := 180 + (ArcTan(Pt.y / Pt.x) * RADTODEG) else

  if ((Pt.x > 0) and (Pt.y < 0)) then

    Result := 360 - (ArcTan(Abs(Pt.y) / Pt.x) * RADTODEG) else

  Result:=0;

end;



procedure TForm1.FormMouseMove(Sender: TObject; Shift:

TShiftState; X,  Y: Integer);

var

  XYMove : TPoint;

  RotateAngle : Double;

begin

  XYMove := (Point(x - (Form1.Width div 2),

                  (Form1.Height div 2) - y));

  RotateAngle :=

    AngleOfPt(XYMove);

  Form1.Caption := IntToStr(XYMove.x) + #32 +

                   IntToStr(XYMove.y) + ' = ' +

                   FloatToStr(RotateAngle);

end;



procedure TForm1.FormPaint(Sender: TObject);

begin

  Form1.Canvas.MoveTo(Form1.Width div 2,

                      0);

  Form1.Canvas.LineTo(Form1.Width div 2,

                      Form1.Height);

  Form1.Canvas.MoveTo(0,

                      Form1.Height div 2);

  Form1.Canvas.LineTo(Form1.Width,

                      Form1.Height div 2);

end;



procedure TForm1.FormResize(Sender: TObject);

begin

  Invalidate;

end;




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile