AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Winkel zwischen zwei Punkten?!

Ein Thema von Vasco da Gama · begonnen am 28. Aug 2009 · letzter Beitrag vom 4. Sep 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#11

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 13:04
ist ähnlich simpel - Punkt in Polarkoordinaten umrechnen (Winkel zwischen 0 und 2PI).
Zum Winkel dann (2*PI/16) addieren, modulo 2 PI nehmen und dann mit 8/(2*PI) multiplizieren, Dezimalstellen abschneiden und fertig

Den Winkel bekommst du mit der Funktion arctan2() aus der Math-Unit.

Um zu verstehen, was passiert kannst du dir das mal auf einem Blatt Papier verständlich machen - es wird ja im Grunde nur der Winkel genommen und in eine Richtung überführt.
Wenn du es immernoch nicht vestehst, mach mal eine Tabelle, welcher Winkel welche Zahl bekommen soll. Also z.B.

0° =>0
22°=>0
23°=>1
45°=>1
67°=>1
68°=>2
...
337°=>7
338°=>0
359°=>0

Also ist die Lösung, einen Winkel draufzuaddieren, das Ergebnis passend zu teilen und dann die Kommastellen abzuschneiden (Übergang kontinuierlich=>diskret)
  Mit Zitat antworten Zitat
Vasco da Gama

Registriert seit: 2. Aug 2009
131 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 13:41
Danke,hier am Laptop hab ich kein Delphi. Werds dann später testen und Rückmeldung geben
Flo
Programmiere inzwischen hauptsächlich mit C++. Nicht böse werden
  Mit Zitat antworten Zitat
Vasco da Gama

Registriert seit: 2. Aug 2009
131 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 18:50
Hi, folgenden Code hab ich mal zum Testen eingegeben.
Delphi-Quellcode:
Zahl := arctan2(Aim.Y, Aim.X);
  Zahl := Zahl + (2*PI/16);
  Zahl := Zahl mod 2*Pi;
  Zahl := Zahl * (8/(2*PI));
  Showmessage(IntToStr(round(Zahl)));
Da erhalte ich die meldung:
Zitat:
[DCC Fehler] SpielForm.pas(540): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
in der Zeile mit mod, da mod ja nur für Integer gilt. Gibt es mod auch für Gleitkommazahlen(Extended)? Oder hab ich deine Antwort ganz falsch verstanden?

Danke nochmal, mfG
Flo
Programmiere inzwischen hauptsächlich mit C++. Nicht böse werden
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#14

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 18:53
nein, haste schon richtig verstanden.

Wenn es in der Math-Unit keine Mod-Funktion für Gleitkommazahlen gibt, reicht auch ein

Delphi-Quellcode:
if zahl > 2*Pi then zahl := zahl - 2*Pi;
if zahl < 0 then zahl := zahl + 2*Pi;
Das erledigt dann auch gleich die "zwischen 0 und 2 Pi"-Sache (arctan2() liefert evtl. auch negative Werte zurück)
  Mit Zitat antworten Zitat
Vasco da Gama

Registriert seit: 2. Aug 2009
131 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 19:00
Danke, aber jetzt bekomme ich mit:
Delphi-Quellcode:
Zahl := arctan2(Aim.Y, Aim.X);
  Zahl := Zahl + (2*PI/16);
  //Zahl := Zahl mod 2*Pi;
  if zahl > 2*Pi then zahl := zahl - 2*Pi;
  if zahl < 0 then zahl := zahl + 2*Pi;
  Zahl := Zahl * 8/(2*PI);
  Showmessage(IntToStr(round(Zahl)));
Nur entweder eins oder zwei zurückgegeben. Da muss wohl was falschgelaufen sein...?
Flo
Programmiere inzwischen hauptsächlich mit C++. Nicht böse werden
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#16

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 19:46
jfheins schrieb:

Delphi-Quellcode:
if zahl > 2*Pi then zahl := zahl - 2*Pi;
if zahl < 0 then zahl := zahl + 2*Pi;
Der Tangens hat eine Periodizität von 180 Grad (oder pi):
Versuche 'mal

Delphi-Quellcode:
if zahl > Pi then zahl := zahl - Pi;
if zahl < 0 then zahl := zahl + Pi;
Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#17

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 20:05
Möööp

Der Tangens interessiert gar nicht, es wird einmal der arkustangens berechnet und dann ist das nur noch ein Winkel, und der geht schon einmal ganz um den Kreis - also im Intervall 0..2PI oder 0..360°

Also ich weis nicht, was du machst, aber mein Testcode geht:
Code:
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            label5.Text = string.Format("X: {0}\t Y: {1}", e.X, e.Y);

            var x = e.X - 150;
            var y = e.Y - 150;

            var Winkel = Math.Atan2(y, x);

            label1.Text = (Winkel * 180 / Math.PI).ToString() + " °";

            Winkel = Winkel + (2 * Math.PI / 16);

            label2.Text = (Winkel * 180 / Math.PI).ToString() + " °";

            if (Winkel > 2 * Math.PI)
                Winkel = Winkel - 2 * Math.PI;
            if (Winkel < 0)
                Winkel = Winkel + 2 * Math.PI;

            label3.Text = (Winkel * 180 / Math.PI).ToString() + " °";

            var Linie = Math.Truncate(Winkel * 8 / (2 * Math.PI));

            label4.Text = Linie.ToString();
        }
Vergisst du vll. vorher die Koordinaten des Ursprungs abzuziehen?
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 21:28
@jfheins

Zitat:
if (Winkel > Math.PI)
Winkel = Winkel - Math.PI;
if (Winkel < 0)
Winkel = Winkel + Math.PI;
Das müßte auch in C# klappen.

Ansonsten teile ich auch deine Meinung mit den Ursprungskoordinaten.


Probiere 'mal bitte

Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#19

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 21:47
Zitat von Wolfgang Mix:
Probiere 'mal bitte
Bringt - wie erwartet - falsche Ergebnisse

Durch die Beschränkung auf den Bereich 0..180° wird nur noch ein Halbkreis abgedeckt, statt der ganze Kreis. Das Ergebnis ist, dass rechts 0 kommt, dann nach unten rechts die 1 dann nach unten die 2 und nach unten links die 3. Anstatt danach aber mit 4-7 weiter zugehen, fängt es wieder bei 0 an. Ist ja auch logisch, wenn der obere Halbkreis durch das if winkel > pi then einkel := winkel - pi auf den unteren Halbkreis abgebildet wird
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#20

Re: Winkel zwischen zwei Punkten?!

  Alt 3. Sep 2009, 22:05
Ok, danke für den Test.

Irren ist menschlich, sprach der Igel und stieg von der Drahtbürste

Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 11:50 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