Jak obrócić punkt
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;
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;



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..