![]() |
Winkel zwischen 2 Vektoren auch größer als 180°?
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 ![]() 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:
MfG Bigben37
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; |
AW: Winkel zwischen 2 Vektoren auch größer als 180°?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versteh dein Problem nicht ganz, aber willst du das hier erreichen?
(mit der Maus klicken und herumfahren) |
AW: Winkel zwischen 2 Vektoren auch größer als 180°?
Zitat:
Delphi-Quellcode:
procedure TFuncPlotter.OnMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin Rotation := FPlotterStartAngle + RadToDeg(ArcTan2(Y - FStartPos.Y, X - FStartPos.X)); end; |
AW: Winkel zwischen 2 Vektoren auch größer als 180°?
Hui, schon so viele Antworten so früh am morgen ;)
@Aphton: Genau das wollte ich beschreiben :D @Uwe Raabe: Funktionniert leider nicht richtig, es liegt wahrscheinlich daran, dass ich noch den Ursprung, also den Punkt um den ich drehe, mit einbeziehen muss. Aber der Ansatz mit ArcTan2 hat mich auf folgende funktionierende Berechnung gebracht:
Delphi-Quellcode:
MfG Bigben37
procedure TFuncPlotter.OnMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var p1, p2: TPoint; begin p1.X := FStartPos.X - Origin.X; p1.Y := FStartPos.Y - Origin.Y; p2.X := X - Origin.X; p2.Y := Y - Origin.Y; Rotation := FPlotterStartAngle + RadToDeg(ArcTan2(p1.Y, p1.X) - ArcTan2(p2.Y, p2.X)); end; |
AW: Winkel zwischen 2 Vektoren auch größer als 180°?
Ok, dann dürfte dich das hier eventuell weiterbringen:
Edit: Ups... Hab Zitat:
|
AW: Winkel zwischen 2 Vektoren auch größer als 180°?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz