Einzelnen Beitrag anzeigen

Benutzerbild von bigben37
bigben37

Registriert seit: 19. Dez 2007
Ort: Freiburg
116 Beiträge
 
Delphi 2009 Professional
 
#1

Winkel zwischen 2 Vektoren auch größer als 180°?

  Alt 23. Apr 2011, 23:32
Hallo DP,
um ein Objekt mit der Maus um seinen Mittelpunkt zu bewegen brauche ich den Winkel, den zwischen dem Vektor Ursprung - Startposition der Maus und Ursprung - momentane Position der Maus liegt. Nach kurzem Googeln bin ich auf diese Seite gestoßen und die dort angegebene Formel funktioniert auch so weit.
Das einzige Problem ist, dass diese Art der Berechung nur für Winkel 0° >= alpha >= 180° gilt, da immer der kleinere von beiden Winkeln berechnet wird.

Nun suche ich aber den Winkel, der zwischen der Startposition der Maus und der momentaten Position der Maus - und zwar in dieser Reihenfolge und nicht umgekerht - liegt.
Wie kann ich also schauen, ob ich den berechneten Winkel noch von 180° subtrahieren muss oder nicht

Hier ist mein aktueller Code:
Delphi-Quellcode:
procedure TFuncPlotter.OnMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  p1, p2: TPoint;
  da: Double; //delta alpha;
begin
  p1.X := FStartPos.X - Origin.X;
  p1.Y := FStartPos.Y - Origin.Y;
  p2.X := X - Origin.X;
  p2.Y := Y - Origin.Y;
  da := RadToDeg(ArcCos(((p1.X * p2.X + p1.Y * p2.Y) / (Sqrt(Sqr(p1.X) + Sqr(p1.Y)) * Sqrt(Sqr(p2.X) + Sqr(p2.Y)))))); //(p1 * p2) / (|p1| * |p2|)
  Rotation := FPlotterStartAngle + da;
end;
MfG Bigben37
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat