Sterne und Konstellationen können in der Simulation von Sternen aus dem Hipparcos-Katalog nicht erkannt werden

Ich erstelle ein Planetariumsprogramm mit Unity3D und C #, um Sterne aus dem Hipparcos-Katalog zu zeichnen. Mit den Spalten Plx, _RA.icrs und _DE.icrs des Datensatzes ist es mir gelungen, die Entfernung in Parsec zu bearbeiten und einen kartesischen Koordinatensatz zu berechnen.

Simulationsklasse...

public class Simulation : MonoBehaviour
{
    public IEnumerator loadStars()
    {
        starsLoaded = 0;
        var stopWatch = new Stopwatch();
        stopWatch.Start();
        // Use the last frame duration as a guide how long one frame should take
        var targetMilliseconds = Time.deltaTime * 100f;
        for (int i = 0; i < totalStars; i++)
        {
            Double.TryParse(datasetTable[i, 3], out double test);
            if (!(datasetTable[i, 12] == null) && !(datasetTable[i, 13] == null) && !(datasetTable[i, 6] == null))
            {
                GameObject thisStar = Instantiate(starPrefab, transform.position, transform.rotation) as GameObject;
                thisStar.transform.parent = starHolder.transform;
                Int32.TryParse(datasetTable[i, 0], out (thisStar.GetComponent<Star>().ID));
                Double.TryParse(datasetTable[i, 12], out (thisStar.GetComponent<Star>().RA));
                Double.TryParse(datasetTable[i, 13], out (thisStar.GetComponent<Star>().DE));
                Double.TryParse(datasetTable[i, 3], out (thisStar.GetComponent<Star>().Vmag));
                Double.TryParse(datasetTable[i, 6], out (thisStar.GetComponent<Star>().Plx));
                Double.TryParse(datasetTable[i, 10], out (thisStar.GetComponent<Star>().CI));
            }
            if (stopWatch.ElapsedMilliseconds > targetMilliseconds)
            {
                yield return null;
                stopWatch.Restart();
            }
            starsLoaded++;
        }
    }
}

Sterneklasse:

public class Star : MonoBehaviour
{
    /// <summary>
    /// Identifier (HIP number). "HIP" is appended to the ID, for Hipparcos
    /// </summary>
    [SerializeField] public int ID; // { get; set; }
    /// <summary>
    /// Right Ascension (J2000) in degrees. 
    /// </summary>
    [SerializeField] public double RA; //{ get; set; }
    /// <summary>
    /// Declination (J2000) in degrees. 
    /// </summary>
    [SerializeField] public double DE; //{ get; set; }
    /// <summary>
    /// Magnitude in Johnson V
    /// </summary>
    [SerializeField] public double Vmag; //{ get; set; }
    /// <summary>
    /// Trigonometric parallax, measured in milli-seconds of arc
    /// </summary>
    [SerializeField] public double Plx; //{ get; set; }
    /// <summary>
    /// Colour index in Johnson B-V colour
    /// </summary>
    [SerializeField] public double CI; //{ get; set; }
    /// <summary>
    /// Distance of the star from the centre of Earth measured in kilometres
    /// </summary> 
    [SerializeField] public double distanceFromEarth;
    /// <summary>
    /// Cartesian (X,Y,Z) positioning of the star
    /// </summary>
    [SerializeField] Vector3 cartesianPositioning;


    // Start is called before the first frame update
    void Start()
    {
        positionStar();
    }

    private void distanceFromEarthCalc()
    {
        // Convert Plx from milliarcseconds to arcseconds (seconds of arc)
        double PlxSOA = Plx / 1000;
        // Calculate distance from equation d=1/p
        // distance d is measured in parsecs and the parallax angle p is measured in arcseconds.
        double dPC = 1 / PlxSOA;
        /// Convert parsecs to kilomentres
        /// Conversion can bbe found here:
        /// https://en.wikipedia.org/wiki/Parsec
        /// 
        /// QUICK NOTE: converting to km causes issues with unity - values are too high
        ///             maybe work with parsecs instead?
        ///             
        //distanceFromEarth = (dPC * (96939420213600000 / math.PI_DBL)) / 1000;
        //distanceFromEarth = distanceFromEarth / 10000; // metres to kilometres
        distanceFromEarth = dPC * 10; // multiplied by 10 to move stars away from camera
    }


    private void cartesianPositioningCalc()
    {
        distanceFromEarthCalc();

        double RA_rad = RA * (math.PI_DBL / 180);
        double DE_rad = DE * (math.PI_DBL / 180);

        cartesianPositioning.x = (float)(distanceFromEarth * (math.cos(DE_rad)) * (math.cos(RA_rad)));
        cartesianPositioning.y = (float)(distanceFromEarth * (math.cos(DE_rad)) * (math.sin(RA_rad)));
        cartesianPositioning.z = (float)(distanceFromEarth * (math.sin(DE_rad)));
    }

    private void positionStar()
    {
        cartesianPositioningCalc();
        gameObject.transform.position = cartesianPositioning;
        gameObject.transform.localScale = new Vector3(2, 2, 2);
    }
}

Blick von der Kamera:Blick von der Unity-Kamera

3D-Ansicht der Szene (die Ausrichtung der Kamera wird durch die Pfeile angezeigt):3D-Ansicht der Szene

Mit dem Bild von der Kamera habe ich versucht, es auf http://nova.astrometry.net/ hochzuladen , konnte aber keine Sterne/Sternbilder finden.

Also dachte ich darüber nach, die Vektoren der Sterne zu normalisieren.

Bei unveränderter Simulationsklasse habe ich die Variable distanceFromEarth in der Star-Klasse auf 900 geändert, um die Vektoren zu normalisieren (jeder Stern hat nicht die gleiche Entfernung vom Zentrum).

Blick von der Kamera:Blick von der Kamera

3D-Ansicht der Szene (die Ausrichtung der Kamera wird durch die Pfeile angezeigt):3D-Ansicht der Szene

Selbst nach der Normalisierung führte das Hochladen des Bildes der Ansicht von der Kamera auf die Bildverarbeitungswebsite dazu, dass keine Sterne/Sternbilder erkannt wurden.

Was mache ich falsch, warum werden Sterne und Sternbilder nicht erkannt?

Versuchen Sie, die Entfernung zu ignorieren, und stellen Sie diese für jeden Stern gleich groß ein. Skalieren Sie die sichtbare Größe umgekehrt zur Magnitude und / oder begrenzen Sie sie auf Sterne, die heller als 5 mag sind. Sehen Sie sich das Wetter an, all das zusammen ergibt einige Ergebnisse
Mein photo.stackexchange.com/questions/92387/… diskutiert die Größe eines Sterns auf einem fotografischen Medium und kann hilfreich sein oder auch nicht
Eigentlich ziemlich hilfreich, das wird sich als nützlich erweisen, wenn ich anfange, dynamische und einzigartige Modelle für jeden Stern zu erstellen

Antworten (1)

Die scheinbare Helligkeit m = Vmagkönnte fehlen. Sterne der scheinbaren Helligkeit m = 0 sollten 100 mal so hell erscheinen wie m = 5 Sterne. Wenn Sie eine Sicht mit bloßem Auge simulieren, können Sie Sterne mit m >6 weglassen.

Wenn Sie Sterne in ungleichmäßigen Entfernungen platzieren, müssen Sie die absolute Helligkeit M aus der scheinbaren Helligkeit m und der Entfernung berechnen. Wenn p = PlxParallaxe in Millibogensekunden ist,

M M + 5 Protokoll 10 P 10

Wenn alle Sterne aus dem gleichen (emittierenden?) Material modelliert werden, sollte das Objekt, das einen Stern der absoluten Helligkeit M = 0 darstellt, die 100-fache Oberfläche und den 10-fachen Radius eines Sterns mit M = 5 haben.

R ( M ) = 10 1 M / 5 R ( 5 )

Um Ihre Arbeit zu überprüfen, wären Planetariumsseiten wie TheSkyLive oder Stellarium Web weniger rechenintensiv als das Hochladen von Bildern auf astrometry.net.

Gibt es irgendeine mathematische Formel, die verwendet werden kann, um den Radius dieser Sternobjekte zu berechnen, angesichts ihrer scheinbaren Größe und Parallaxe/Entfernung von der Erde (berechnet aus den Parallaxenwerten jedes Sterns)?
@SidS Mit Formeln aktualisiert.
Ich habe die Formeln implementiert, aber ich glaube nicht, dass ich es richtig gemacht habe, da die Sterne massiv sind. Bitte überprüfen Sie es für mich unter dieser URL: pastebin.com/HYazJLq2 . Außerdem muss der maximale Radius 5 sein, wie erreiche ich das?
Ich habe das Skript vollständig aktualisiert, um Ihrer Antwort zu folgen. Auf das Skript kann über dieselbe URL wie oben zugegriffen werden. Ich habe dazu unter dieser URL eine neue Frage eröffnet: astronomy.stackexchange.com/questions/36406/…