Hallo,
ich habe diese kleine Funktion geschrieben, um einen
Punkt in einem bestimmten Winkel zu
drehen und dachte, dass sie auch für andere ganz nützlich sein könnte. Sie erwartet als Parameter den zu drehenden
Punkt, den Winkel im Bogenmaß (Umrechnung vom Grad- ins Bogenmaß: x*pi/180) und den Mittelpunkt der Drehung.
Delphi-Quellcode:
// X, Y = die Koordinaten des Punktes.
// centerx, centery = Koordinaten, um die der Punkt gedreht werden soll
// angle = Winkel (im Bogenmaß)
procedure turnpoint(var x, y: double; const centerx, centery: double; angle: double);
var
fx,fy: double;
flength: double;
function PointDistance(x1,y1,x2,y2: double):double;
begin result := sqrt( (x2 - x1) * (x2 - x1) +
(y2 - y1) * (y2 - y1));
end;
begin
flength := pointdistance(centerx, centery, x, y);
angle := angle+arctan2(y-centery,x-centerx);
while angle<0 do
angle := angle+2*pi;
while angle>2*pi do
angle := angle-2*pi;
x := centerx+cos(angle)*flength;
y := centery+sin(angle)*flength;
end;
Eim Beispielaufruf könnte so erfolgen:
Delphi-Quellcode:
procedure TForm1.FormPaint(sender: TObject);
var
x,y: double;
begin
x := 100;
y := 200;
Canvas.Pixels[round(x),round(y)] := clgreen; // Punkt auf Canvas grün markieren
turnpoint(x, y, clientwidth/2, clientheight/2, 45*pi/180); // Punkt um die Mitte der Form im Winkel von 45° drehen
Canvas.Pixels[round(x),round(y)] := clred; // gedrehten Punkt auf Canvas rot markieren
end;
[edit=CalganX]Titel angepasst. Mfg, CalganX[/edit]