Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
FreePascal / Lazarus
|
Punkt um Angelpunkt und best. Winkel drehen
8. Jul 2007, 19:48
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]
|
|
Zitat
|