Hilfe bei der Umwandlung von Rektaszension und Deklination in 3D-Vektoren

Verwenden der Rektaszensions- und Deklinationswerte aus der HYG-Datenbank von The Astronomy Nexus :

Die Rektaszension wird in Stunden und die Deklination in Grad gemessen.

1 - Rektaszension und Deklination in Grad umwandeln

float getAngle(float value, char units)
{
    if (units == 'h')
    {
        // 15 degrees = 1 hour
        // 360/24 = 15

        return value * 15;
    }
    else
    {
        return value;
    }
}

Wenn Rektaszension eingegeben wird, wird die Eingabe mit 15 multipliziert, da RA in Stunden gemessen wird.

Wenn die Deklination eingegeben wird, wird der Eingabewert zurückgegeben, da Dec bereits in Grad gemessen wird.

2 - Berechnen Sie die Vektoren

Trigonometrie-Diagramm

Es können zwei gleichschenklige Dreiecke abgeleitet werden, eines für die horizontale Ebene und ein weiteres für die vertikale Ebene. Die Winkel sind Alpha und Delta, Rektaszension bzw. Deklination. Wenn Sie diese Winkel verwenden und wissen, dass einige der Entfernungen gleich der Entfernung zwischen dem Mittelpunkt der Himmelskugel und dem Stern sind, sollte der folgende Code funktionieren.

Vector3 getVectors(float RA, float Dec)
{
    float x = distanceStars;
    float z = (2 * distanceStars * (Mathf.Sin((getAngle(RA, 'h'))/ 2)));
    float y = (2 * distanceStars * (Mathf.Sin((getAngle(Dec, 'd'))/ 2)));

    return new Vector3(x, y, z);
}

Leider scheint mein Code nicht zu funktionieren, da dies die Ausgabe ist, die ich bekomme:

Grafische Ausgabe

Wie Sie sehen können, verteilen sich die Sterne (weiße Punkte) nicht gleichmäßig um die Erde (die schwarze Kugel in der Mitte).

Es wäre toll, wenn mir jemand dabei helfen könnte.

Sie sind auf dem richtigen Weg. Überspringen Sie getAngle() zugunsten von math.stackexchange.com/questions/15323/…
rechnest du irgendwo in Radiant um?
Was Barry gesagt hat. Außerdem sehen Ihre Formeln nicht wie die üblichen polaren bis kartesischen Formeln aus. Und Sie sollten wahrscheinlich doublenicht verwenden float.
Ich bin dem Link gefolgt, den @ebv kommentiert hat, und jetzt funktioniert mein Programm perfekt
@barrycarter nein, kein Bogenmaß verwenden
@ Mike G war schneller :-) Und ja, abhängig von Ihrer Mathematikbibliothek müssen Sie Ihre Dezimalwinkel in Bogenmaß umwandeln, damit die Positionen korrekt sind. C/C++ verwendet Radianten. Wenn Sie eine hohe Genauigkeit benötigen, multiplizieren Sie Grad mit 0,01745329251994329576923690768489.

Antworten (1)

Die Sterne sollten passen R = X 2 + j 2 + z 2 aber scheinen in der gezeichnet werden X = R Flugzeug statt.

Üblicherweise liegt die x- Achse bei ( α = 0 h , δ = 0°), die y -Achse bei ( α = 6 h , δ = 0°) und die z- Achse bei δ = +90°.

Verwenden von rechtwinkligen Dreiecken anstelle von gleichschenkligen Dreiecken,

rechtwinklige Dreiecke

Dann H = R cos δ , Und

X = R cos δ cos a j = R cos δ Sünde a z = R Sünde δ

Die meisten Mathematikbibliotheken verwenden Bogenmaß für Winkel. Das Passieren von Winkeln in anderen Einheiten an Triggerfunktionen kann dazu führen, dass eine Himmelskugel etwas gleichmäßig, aber falsch abgedeckt wird.

Used korrigierte die Mathematik, wechselte von Grad zu Bogenmaß und jetzt sind die Sterne noch besser und viel gleichmäßiger verteilt, danke!