Berechnung von Sonnenauf und Sonnenuntergang

delphiking1980

Bekanntes Mitglied
Hallo,

ich habe da mal probiert den Sonnenauf/untergang zu berechnen da es ja im Internet viele gute Seiten zu diesem Thema gibt bin ich auch schnell zu einem JavaScript gekommen welches ich nach Java Portieren wollte nur irgendwie stimmen die Berechnungen nicht mehr ich schätze mal auch ein Rundungsfehler welcher mir ein paar Minuten klaut.

Mein Quellcode :

Java:
public class SunRiseSet {

    private double pi = Math.PI;
    private double rad = pi / 180.0;
    private double h = -(50.0 / 60.0) * rad;
    private double breite = 47.5;
    private double b = breite * rad;
    private double laenge = 8.5;
    private int zeitzone = 2;
    private int tag;

    private String aufgangStr;
    private String untergangStr;

    public SunRiseSet(double breite, double laenge, int tag, int zeitzone) {
        this.breite = breite;
        this.laenge = laenge;
        this.zeitzone = zeitzone;
        this.tag = tag;
        init();
    }

    private void init() {
        double aufgang = aufgang1(this.tag);
        double untergang = untergang1(this.tag);

        aufgang = aufgang - laenge / 15.0 + zeitzone;
        untergang = untergang - laenge / 15.0 + zeitzone;

        int aufgangh = (int) Math.floor(aufgang);
        String aufgangH = ((aufgangh < 10) ? "0" + String.valueOf(aufgangh) : String.valueOf(aufgangh));
        int aufgangm = (int) Math.floor(((aufgang - aufgangh) * 100) * 3 / 5);
        String aufgangM = ((aufgangm < 10) ? "0" + String.valueOf(aufgangm) : String.valueOf(aufgangm));
        int aufgangs = (int) Math.floor(((((((aufgang - aufgangh) * 100) * 3 / 5) - aufgangm) * 100) * 3 / 5));
        String aufgangS =((aufgangs < 10) ? "0" + String.valueOf(aufgangs) : String.valueOf(aufgangs));
        this.aufgangStr = aufgangH + ":" + aufgangM + ":" + aufgangS;

        int untergangh = (int) Math.floor(untergang);
        String untergangH = ((untergangh < 10) ? "0" + String.valueOf(untergangh) : String.valueOf(untergangh));
        int untergangm = (int) Math.floor(((untergang - untergangh) * 100) * 3 / 5);
        String untergangM = ((untergangm < 10) ? "0" + String.valueOf(untergangm) : String.valueOf(untergangm));
        int untergangs = (int) Math.floor(((((((untergang - untergangh) * 100) * 3 / 5) - untergangm) * 100) * 3 / 5));
        String untergangS = ((untergangs < 10) ? "0" + String.valueOf(untergangs) : String.valueOf(untergangs));
        this.untergangStr = untergangH + ":" + untergangM + ":" + untergangS;

    }

    private double sonnendeklination(double t) {
        return 0.40954 * Math.sin(0.0172 * (t - 79.35));
    }

    private double zeitdifferenz(double deklination) {
        return 12.0 * Math.acos((Math.sin(h) - Math.sin(b) * Math.sin(deklination)) / (Math.cos(b) * Math.cos(deklination))) / pi;
    }

    private double zeitgleichung(double t) {
        return -0.1752 * Math.sin(0.033430 * t + 0.5474) - 0.1340 * Math.sin(0.018234 * t - 0.1939);
    }

    private double aufgang1(double t) {
        double deklination = sonnendeklination(t);
        return 12 - zeitdifferenz(deklination) - zeitgleichung(t);
    }

    private double untergang1(double t) {
        double deklination = sonnendeklination(t);
        return 12 + zeitdifferenz(deklination) - zeitgleichung(t);
    }

    public String getAufgangStr() {
        return aufgangStr;
    }

    public String getUntergangStr() {
        return untergangStr;
    }

    public static void main(String... args) {
        SunRiseSet sun = new SunRiseSet(52,9, 176, 2);

        System.out.println("Sonnenaufgang : " + sun.getAufgangStr());
        System.out.println("Sonnenuntergang : " + sun.getUntergangStr());
    }
}

und hier das Java-Script

Java:
</script>

<script type="text/javascript">
pi       = Math.PI;
RAD      = pi/180.0;
h        = -(50.0/60.0)*RAD;
Breite   = 47.5;
B        = Breite*RAD;
Laenge   = 8.5;
Zeitzone = 1.0;

function sqr(x)
  {
  return x*x;
  }

function sonnendeklination(T)
  {
  return 0.40954*Math.sin(0.0172*(T-79.35));
  }

function zeitdifferenz(Deklination)
  {
  return 12.0*Math.acos((Math.sin(h) - Math.sin(B)*Math.sin(Deklination)) / (Math.cos(B)*Math.cos(Deklination)))/pi;
  }

function zeitgleichung(T)
  {
  return -0.1752*Math.sin(0.033430 * T + 0.5474) - 0.1340*Math.sin(0.018234*T - 0.1939);
  }

function aufgang1(T)
  {
  DK = sonnendeklination(T);
  return 12 - zeitdifferenz(DK) - zeitgleichung(T);
  }

function untergang1(T)
  {
  DK = sonnendeklination(T);
  return 12 + zeitdifferenz(DK) - zeitgleichung(T);
  }

function compute(Form)
  {
  Laenge     = eval(Form.Laenge.value);
  Breite     = eval(Form.Breite.value);
  Zone       = eval(Form.Zone.value);
  T          = eval(Form.T.value);
  B          = Breite*RAD;
  Aufgang    = aufgang1(T);
  Untergang  = untergang1(T);

  Aufgang    = Aufgang   - Laenge /15.0 + Zone;
  Untergang  = Untergang - Laenge /15.0 + Zone;

  Aufgangh = Math.floor(Aufgang);
  AufgangH = (Aufgangh < 10) ? "0"+Aufgangh : Aufgangh;
  Aufgangm = Math.floor(((Aufgang-Aufgangh)*100)*3/5);
  AufgangM = (Aufgangm < 10) ? "0"+Aufgangm : Aufgangm;
  Aufgangs = Math.floor(((((((Aufgang-Aufgangh)*100)*3/5)-Aufgangm)*100)*3/5));
  AufgangS = (Aufgangs < 10) ? "0"+Aufgangs : Aufgangs;
  Aufgang  = AufgangH+":"+AufgangM+":"+AufgangS;

  Untergangh = Math.floor(Untergang);
  UntergangH = (Untergangh < 10) ? "0"+Untergangh : Untergangh;
  Untergangm = Math.floor(((Untergang-Untergangh)*100)*3/5);

  UntergangM = (Untergangm < 10) ? "0"+Untergangm : Untergangm;
  Untergangs = Math.floor(((((((Untergang-Untergangh)*100)*3/5)-Untergangm)*100)*3/5));
  UntergangS = (Untergangs < 10) ? "0"+Untergangs : Untergangs;
  Untergang  = UntergangH+":"+UntergangM+":"+UntergangS;

  Form.Aufgang.value   = Aufgang;
  Form.Untergang.value = Untergang;
  Form.Zeitgleichung.value = 60.0*zeitgleichung(T);
  Form.Deklination.value = sonnendeklination(T)/RAD;
  }

function sinit()
  {
  with(document.Sunrise)
  {
  Laenge.value        = "11.02";
  Breite.value        = "49.6";
  Zone.value          = "1";
  T.value             = "80";
/*
  form.Aufgang.value       = "0";
  form.Untergang.value     = "0";
  form.Zeitgleichung.value = "0";
  form.Deklination.value   = "0";
*/
  }
  }
</script>

Vieleicht findet ja einer von euch den Fehler
 

delphiking1980

Bekanntes Mitglied
Wenn ich jetzt die Koordinaten von dem ersteller des Javascriptes nehme dann stimmen die Berechnungen. Nur mit den Koordinaten zu meiner Heimat stellt er sich querr.;(
 

delphiking1980

Bekanntes Mitglied
man sollte nicht so etwas tun und dann im Konstruktor die Membervariable neubefüllen......

Java:
private double breite = 47.5;
    private double b = breite * rad;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Berechnung der Fakultät von Fließkommazahlen anhand von Stirlingformel Allgemeine Java-Themen 4
I Berechnung Lagerbestands / Verfügbarkeitsprüfung Allgemeine Java-Themen 1
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
D Berechnung des Cosinus Allgemeine Java-Themen 4
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
A Fehlerhafte Nst Berechnung einer bestimmten Fkt. (Bisektion) Allgemeine Java-Themen 10
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
P Performate Zeiteiteiteilungs- Berechnung Allgemeine Java-Themen 4
B TileMap berechnung? Allgemeine Java-Themen 8
P jodaTime Berechnung Geburtstag Allgemeine Java-Themen 1
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
B BlueJ Potenz Berechnung Allgemeine Java-Themen 16
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
M Berechnung verbessern Allgemeine Java-Themen 8
W OOP Berechnung des Skalarprodukts Allgemeine Java-Themen 9
H Demonstrationsprogramm zur CRC-Berechnung Allgemeine Java-Themen 2
E Berechnung in Arraylist Allgemeine Java-Themen 10
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
E Falsche Ergebnisse bei PQ-Formel Berechnung Allgemeine Java-Themen 12
N Optimierung einer Berechnung Allgemeine Java-Themen 17
G java.sql Time Berechnung Allgemeine Java-Themen 6
Eldorado Berechnung von Koordinaten, die zufällig aussehen Allgemeine Java-Themen 5
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
J Berechnung anhand einer XML-Datei Allgemeine Java-Themen 3
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
G Programm zur Berechnung von Summe, Median, Erwartungswert, usw von einem Array Allgemeine Java-Themen 7
C Bilder rotieren, Denkfehler in der Berechnung? Allgemeine Java-Themen 2
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
T Berechnung in zweidimensionalem Array Allgemeine Java-Themen 3
X hashCode() Berechnung Allgemeine Java-Themen 5
R Tabelle - Berechnung der "Zeilenart" Allgemeine Java-Themen 2
L Berechnung mit Module bis bes.timme Zahl erreicht. Allgemeine Java-Themen 4
P CRC Berechnung Allgemeine Java-Themen 2
J berechnung von potenzen und wurzel-ziehen ohne klasse " Allgemeine Java-Themen 14
D Problem bei einer Berechnung (pow?) Allgemeine Java-Themen 3
P Java-Programm zur Berechnung globaler Minimas und Maximas-ff Allgemeine Java-Themen 4
B Primzahlen Berechnung optimieren Allgemeine Java-Themen 7
A Probleme bei der Berechnung von Pi! Java Problem Allgemeine Java-Themen 2
M Servlet --> Berechnung --> Timeout vom Proxy oder IE!? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben