AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Winkel zwischen 2 Vektoren auch größer als 180°?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von bigben37 · begonnen am 24. Apr 2011 · letzter Beitrag vom 24. Apr 2011
Antwort Antwort
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 24. Apr 2011, 00: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
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 24. Apr 2011, 02:27
Ich versteh dein Problem nicht ganz, aber willst du das hier erreichen?
(mit der Maus klicken und herumfahren)
Angehängte Dateien
Dateityp: zip Project1.zip (155,4 KB, 14x aufgerufen)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 24. Apr 2011, 08:41
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.
Delphi-Quellcode:
procedure TFuncPlotter.OnMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Rotation := FPlotterStartAngle + RadToDeg(ArcTan2(Y - FStartPos.Y, X - FStartPos.X));
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bigben37
bigben37

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

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

  Alt 24. Apr 2011, 11:49
Hui, schon so viele Antworten so früh am morgen

@Aphton: Genau das wollte ich beschreiben

@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:
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;
MfG Bigben37
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 24. Apr 2011, 11:58
Ok, dann dürfte dich das hier eventuell weiterbringen:

Edit:
Ups... Hab
Zitat:
Aber der Ansatz mit ArcTan2 hat mich auf folgende funktionierende Berechnung gebracht
überlesen
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (24. Apr 2011 um 12:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 24. Apr 2011, 12:29
@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]
Da hatte ich wohl etwas überlesen...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz