Programowanie w języku Delphi » FAQ

Jak obrócić punkt

  • 2010-02-28 15:47
  • 2 komentarze
  • 697 odsłon
  • Oceń ten tekst jako pierwszy
Obrót punktu wobec wybranego środnka

function Turn(Center,Point: Windows.TPoint;Angle: System.Real):Windows.TPoint;
var dx,dy,px,py,r: System.Integer;
Begin
    dx := Center.X - Point.X;
    dy := Center.Y - Point.Y;
    r := System.Round(System.Sqrt(System.Sqr(dx)+System.Sqr(dy)));
    Angle :=  Math.DegToRad(Angle) - (System.Pi/2) - Math.ArcTan2(dy,dx);
    px := Math.Sign(System.Sin(Angle))*System.Round(System.Sqrt(System.Sqr(r*Math.Tan(Angle))/( 1+ System.Sqr(Math.Tan(Angle)))) );
    py := Math.Sign(System.Cos(Angle))*System.Round(System.Sqrt(System.Sqr(r)/(1+ System.Sqr(Math.Tan(Angle)))));
    Turn.X := Center.X + px;
    Turn.Y := Center.Y + py;
End;

2 komentarze

Azarien 2010-03-06 13:28

Strasznie pokręcona ta funkcja...

function Turn(Center,Point: Windows.TPoint;Angle: System.Real):Windows.TPoint;
var dx,dy: System.Integer;
    sina,cosa : System.Real;
Begin
  Angle := Math.DegToRad(Angle);
  sina := System.Sin(Angle);
  cosa := System.Cos(Angle);
  dx := Point.X - Center.X;
  dy := Point.Y - Center.Y;
  Turn.X := System.Round(dx*cosa - dy*sina + Center.X);
  Turn.Y := System.Round(dx*sina + dy*cosa + Center.Y);
End;

ale po co wszędzie te mathy i systemy to już inna sprawa..

Gelldur 2010-02-28 20:01

troche śmieszny tytuł obrócić punkt...