Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Punkt um Angelpunkt und best. Winkel drehen

  Alt 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]
  Mit Zitat antworten Zitat