/// <summary> /// Opretter en konstellation med et givent navn, ud fra et array af stjerner. /// </summary> /// <param name="stars">Stjernerne som konstellationen skal bestå af.</param> /// <param name="name">Navnet på konstellationen.</param> /// <returns></returns> public static Constellation CreateConstellation(this Star[] stars, string name) { // Initialiserer et array så der er plads til stjernerepræsentationer for hver stjerne. Constellation.StarRepresentation[] starRepresentations = new Constellation.StarRepresentation[stars.Length]; for (int i = 0; i < stars.Length; i++) { List <double> angles = new List <double>(); List <double> distances = new List <double>(); for (int j = 0; j < stars.Length; j++) { if (j == i) { continue; } for (int k = 0; k < stars.Length; k++) { if (k == j || k == i || j == i) { continue; } Point p1 = stars[i].CenterPoint; Point p2 = stars[j].CenterPoint; Point p3 = stars[k].CenterPoint; double angle = ConstellationReader.GetAngularSeperation(p1, p2, p3); double distance = ConstellationReader.GetRelativePointSeperation(p1, p2, p3); // Tilføjer den fundne vinkel. angles.Add(angle); // Tilføjer den fundne afstand. distances.Add(distance); } } // Samler alle fundne vinkler og afstande til en nyinstantieret repræsentation af en stjerne. starRepresentations[i] = new Constellation.StarRepresentation(angles.ToArray(), distances.ToArray()); } // Returnerer en nyinstantieret konstellation med navn og stjernerepræsentationer. return(new Constellation(name, starRepresentations)); }
public static Star[] FindConstellation(this Star[] stars, Constellation c, double t) { List <Star> starsInConstellation = new List <Star>(); int i = 0; for (int j = 0; j < stars.Length; j++) { // Vinkler skal tjekkes på ny for nye stjerne. int h = 0; for (int k = 0; k < stars.Length; k++) { // Sørg for ikke at starte næste løkke, hvis vi allerede ved at den skal springes over. if (k == j) { continue; } for (int l = 0; l < stars.Length; l++) { // Sørg for at de tre stjerne er forskellige. if (l == k || l == j || k == j) { continue; } if (starsInConstellation.Contains(stars[j])) { continue; } Point p1 = stars[j].CenterPoint; Point p2 = stars[k].CenterPoint; Point p3 = stars[l].CenterPoint; double measuredAngle = ConstellationReader.GetAngularSeperation(p1, p2, p3); double measuredDistance = ConstellationReader.GetRelativePointSeperation(p1, p2, p3); // Tjek hvorvidt om den fundne vinkel, ligger inden for den accepterede afvigelse. if ((measuredAngle <= c.StarRepresentations[i].Angles[h] + t && measuredAngle >= c.StarRepresentations[i].Angles[h] - t)) //|| //(measuredAngle <= 360 - c.StarRepresentations[i].Angles[h] + t && //measuredAngle >= 360 - c.StarRepresentations[i].Angles[h] - t)) { // Tjek hvorvidt om den fundne afstand, ligger inden for den accepterede afvigelse. if (measuredDistance <= c.StarRepresentations[i].Distances[h] + 0.025 && measuredDistance >= c.StarRepresentations[i].Distances[h] - 0.025) { // Sørger for at det er en ny vinkel som skal tjekkes efter. h++; k = 0; l = 0; // Tjek om alle vinkler allerede er blevet tjekket igennem. if (h == c.StarRepresentations[i].Angles.Length) { starsInConstellation.Add(stars[j]); // Fortsæt til næste stjernerepræsentation. i++; // Start med at skulle tjekke nye vinkler for den næste stjernerepræsentation. h = 0; j = 0; // Tjek om alle stjernerepræsentationer allerede er blevet tjekket igennem. if (i == c.StarRepresentations.Length) { return(starsInConstellation.ToArray()); } } } } } } } return(null); }