Christian Seiler: Winkel auf "Gleichheit" prüfen

Beitrag lesen

Hallo Micha,

ich suche nach einer eleganten Lösung zu prüfen, ob Winkel gleich sind. Zunächst definiere ich alle Winkel als positiv. Ein Negativer Winkel wird also so lange um 2*PI erweitert, bis er positiv ist - andersrum nutz ich Modular, um ihn auf den Vollkreis zu reduzieren.

Statt Modulo + Schleife ist es übrigens sinnvoller, mit Math.floor() zu arbeiten. Folgende Funktion überprüft, ob zwei periodische Variablen nah genug zueinander sind:

  public static boolean near (double v1, double v2, double period, double epsilon) {  
    v1 -= Math.floor (v1 / period) * period;  
    v2 -= Math.floor (v2 / period) * period;  
    return Math.abs (v1 - v2) < epsilon ||  
           period - Math.abs (v1 - v2) < epsilon;  
  }

Erläuterung:

v1: Erster Wert
  v2: Zweiter Wert
  period: Die Periode, z.B. 2 * Math.PI
  epsilon: Die maximale Differenz der beiden Werte

v1 -= Math.floor (v1 / period) * period;

Dies sorgt dafür, dass die Werte im rechtshalboffenen Intervall
    [0, period) liegen. Dies funktioniert immer - egal ob die Werte
    vorher negativ waren oder positiv oder ob sie viel zu groß waren
    oder nicht (Spiel das einfach mit verschiedenen Zahlen durch und
    Du wirst sehen, dass diese Berechnung das korrekte Ergebnis liefert).

Math.abs (v1 - v2) < epsilon

Dies überprüft, ob die Werte dicht zusammen liegen - sollte
    sofort klar sein.

period - Math.abs (v1 - v2) < epsilon

Dies überprüft, ob die Werte so weit auseinander liegen, dass der
    Abstand zur Periodendauer klein genug ist.

Viele Grüße,
Christian