AGB  ·  Datenschutz  ·  Impressum  







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

Kompass 2D

Ein Thema von schand99 · begonnen am 19. Jan 2015 · letzter Beitrag vom 21. Jan 2015
 
Namenloser

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

AW: Kompass 2D

  Alt 19. Jan 2015, 21:15
Wie zeichnest du denn?

Ich würde empfehlen, mit Vektoren zu arbeiten und Winkel, wo es nur geht, komplett zu vermeiden. In Programmen mit Winkeln zu arbeiten ist immer sehr umständlich und außerdem langsam. Dazu kommen noch Probleme wie 360° = 0°. Meine wärmste Empfehlung: Lerne Vektorrechnung (Analytische Geometrie)! Kommt leider in der Schule viel zu kurz bzw. erst ziemlich spät. Aber mein Leben ist dadurch so viel einfacher geworden...

Um mal am Kompass-Beispiel zu zeigen: Ich nehme mal an, um den Zeiger zu zeichnen hast du irgendwo sowas stehen wie LineTo(Mitte.X + cos(Winkel)*Nadellänge, Mitte.Y + sin(Winkel*Nadellänge) . Das ist im Grunde von hinten durch die Brust ins Auge, weil du wahrscheinlich erst aus einem Vektor den Winkel gemacht hast, nur um dann den Winkel mit sin/cos wieder in einen Vektor zurückzuverwandeln.

Dabei braucht man den Winkel gar nicht. Sagen wir dein (2D-)Vektor heißt V und der zugehörige Winkel φ. Es gilt (immer): V.X = cos(φ) * Vektorlänge und V.Y = sin(φ) * Vektorlänge. Wenn du jetzt einen Vektor mit der Länge 1 haben willst, der in die gleiche Richtung zeigt, dann kannst du das ganz einfach, indem du die V.X und V.Y jeweils durch die Vektorlänge (Pythagoras: Länge = Sqrt(V.X² + V.Y²)) dividierst. Was kommt nun dabei raus? Klar: Ein neuer Vektor V’ mit V’.X = cos(φ) und V’.Y = sin(φ) (den Schritt nennt man übrigens auch normalisieren, und das Ergebnis ist ein sogenannter Einheitsvektor). Ja, und damit ist es jetzt ganz einfach, die Kompassnadel zu zeichnen: LineTo(Mitte.X + V’.X*Nadellänge, Mitte.Y + V’.Y*Nadellänge . Und wir haben kein einziges mal Sinus, Cosinus oder Arctan gebraucht. Deine ganze GetWinkel-Funktion wird überflüssig.

Jetzt gibt es natürlich noch ein kleines Problem: Der Vektor von deinem Sensor hat 3 Dimensionen. Du kannst aber leicht deinen gewünschten 2D-Vektor daraus berechnen, indem du eine der Komponenten X, Y oder Z einfach weglässt. Das hat Medium schon beschrieben.
  Mit Zitat antworten Zitat
 


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