package AstroOL; /** Eintrag des Aspektariums. Die Instanzen von AspectPoint repräsentieren einen einzelnen Aspekt. Dies ist der vordefinierte Datentyp für die Einträge im {@link AstroOL.Horoscope#aspectarium Aspektarium} eines Horoskops, das nichts anderes als eine sortierte Liste von Aspektpunkten darstellt. Die Default-Sortierung mit der Methode {@link #compareTo} erfolgt nach der ekliptikalen Länge. In C würde man den Aspektpunkt als strukturierten Datentyp mit der <code>typedef</code> Anweisung modellieren. Eine ähnliche Anweisung gibt es in Java nicht. */ public class AspectPoint implements Comparable { /** Ekliptikale Länge des Aspektpunkts */ public double lon; /** Ekliptikale Breite des Aspektpunkts */ public double lat = 0d; /** Den Aspekt bildender Planet oder Faktor */ public int planet1; /** Aspekt oder Code für "Spiegelpunkt" oder Code für "Parallelpunkt" oder Code für "Halbdistanzpunkt */ public int aspect; public double angle; /** Für Aspekte die Recht- oder Gegenläufigkeit. Ein positiver Sextilaspekt wird vom Promissor in Reihenfolge der Tierkreiszeichen gezählt, ein negativer in der Gegenrichtung */ public char aspectSign; /** Zweiter Planet oder Faktor, bei Halbsummen */ public int planet2; /** Defaultkonstruktor */ public AspectPoint() {} /** Konstruktor mit Übernahme der eklitpikalenm Länge */ public AspectPoint( double lon ) { this.lon = lon; } /** Vergleichsmethode für zwei Aspekte. Wird zum sortierten Aufbau des {@link AstroOL.Horoscope#aspectarium Aspektariums} verwendet. Verglichen werden die ekliptikalen Längen der beiden Aspectpunkte */ public int compareTo( Object o) { AspectPoint a1 = (AspectPoint) o; if (this.lon < a1.lon) return -1; else if (this.lon == a1.lon) return 0; else return 1; } /** Länge eines Aspektpunktes für ein konkretes Horoskop */ public static double getLon(AspectPoint a, Horoscope h) { double lon = 0d; if (a.aspect < Horoscope.hdp) lon = h.pl( a.planet1 ) + Horoscope.aspect[a.aspect] * ((a.aspectSign == '-') ? -1 : 1); else if (a.aspect == Horoscope.hdp) // Den nähergelegenen Halbdistanzpunkt zurückgeben lon = h.pl( a.planet1 ) + Calculator.arcdiff(h.pl(a.planet2),h.pl(a.planet1))/2; else if (a.aspect == Horoscope.azm) lon = 180d-h.pl(a.planet1); else if (a.aspect == Horoscope.aaz) lon = 360d-h.pl(a.planet1); else if (a.aspect == Horoscope.fra) lon = h.pl(a.planet1) + ((a.aspectSign == '-') ? -a.angle : a.angle); else if (a.aspect == Horoscope.frp) lon = a.lon; return Calculator.fmod360(lon); } /** Aspektbreite */ public static double getLat(AspectPoint a, Horoscope h) { // Zur Zeit nur Promissoren mit Breite Null implementiert return 0d; } }