/// <summary> /// eine von aussen auf die Hauptsonne zufliegende Sonne mit Planeten wird erstellt /// </summary> private void AddComingSun() { if (suncount < _Light.Length - 1) { float Massfak = (float)rnd.Next(1, 3) * 5 * PlanetAdvanced2.initSunMass; float Mass = (float)rnd.NextDouble() * Massfak; Point3 Pos = RndPosToSun(Sun, true, true); Pos = (Pos - Sun.Position) * (float)(rnd.Next(10, 20)); // Position weiter von der Sonne entfernen. Point3 Dir = new Point3(); Dir.assign(Sun.Position - Pos); // Bewegung auf die Sonne zu. Dir.x += (float)rnd.NextDouble(); // ein wenig Varianz in der Bewegung. Dir.y += (float)rnd.NextDouble(); // ein wenig Varianz in der Bewegung. Dir.z += (float)rnd.NextDouble(); // ein wenig Varianz in der Bewegung. Dir.Normalize(); // BewegungsRichtung normalisieren. Dir *= (float)((rnd.NextDouble() * 3) + 2f) * 10f; // Speed zurechnen; float[] Color = { (float)rnd.NextDouble(), (float)rnd.NextDouble(), (float)rnd.NextDouble() }; suncount++; o2Sun __Sun = new o2Sun(Pos, Dir, Mass, Color, _Light[suncount]); Objects.Add(__Sun); AddPlanet(__Sun, rnd.Next(1, 9)); // 1 bis 8 Planeten auf die Umlaufbahn der neuen Sonne bringen. } }
private Point3 a() { float distance = Point3.Distance(this.Position, Center.Position); Point3 x = new Point3(); x.assign(Position - Center.Position); float fak = (float)(-Center.G * Center.Mass / Math.Pow(distance, 3)); return(x * fak); }
/// <summary> /// Initialisiertung Tangentialebene in P=(x0,y0,z0) /// </summary> private void initFunctionTangent() { double dif = 4f; m_lPointsFunctionTangent.Clear(); double x = x0 - dif; // links unten double y = y0 - dif; double z = tangentPlane(x, y); Point3 lu = new Point3((float)x, (float)y, (float)z); x = x0 + dif; // rechts unten y = y0 - dif; z = tangentPlane(x, y); Point3 ru = new Point3((float)(x), (float)y, (float)z); x = x0 - dif; // links oben y = y0 + dif; z = tangentPlane(x, y); Point3 lo = new Point3((float)(x), (float)(y), (float)z); // rechts oben Point3 ro = new Point3((float)(x), (float)(y), (float)z); Point3 lr = new Point3(lu.x - ru.x, lu.y - ru.y, lu.z - ru.z); Point3 ou = new Point3(lo.x - lu.x, lo.y - lu.y, lo.z - lu.z); lr.Normalize(); ou.Normalize(); z0 = (float)solvef(x0, y0); Point3 X0 = new Point3(x0, y0, z0); lr *= dif / 2; ou *= dif / 2; lu.assign(X0); lu -= lr; lu -= ou; lo.assign(X0); lo -= lr; lo += ou; ro.assign(X0); ro += lr; ro += ou; ru.assign(X0); ru += lr; ru -= ou; m_lPointsFunctionTangent.Add(new Square(lu, lo, ro, ru)); }
/// <summary> /// Beschleunigung Richtung Bezugsobjekt /// </summary> /// <param name="o">Bezugsobjekt</param> /// <returns></returns> private Point3 a(o2Object o) { float distance = Point3.Distance(this.Position, o.Position); Point3 x = new Point3(); x.assign(Position - o.Position); float fak = (float)(-PlanetAdvanced2.G * o.Mass / Math.Pow(distance, 3)); return(x * fak); }
private Point3 a() { float distance = Point3.Distance(this.Position, Center.Position); Point3 x = new Point3(); x.assign(Position - Center.Position); float fak = (float)(-Center.G * Center.Mass / Math.Pow(distance, 3)); return x * fak; }
/// <summary> /// eine von aussen auf die Hauptsonne zufliegende Sonne mit Planeten wird erstellt /// </summary> private void AddComingSun() { if (suncount < _Light.Length - 1) { float Massfak = (float)rnd.Next(1, 3) * 5 * PlanetAdvanced2.initSunMass; float Mass = (float)rnd.NextDouble() * Massfak; Point3 Pos = RndPosToSun(Sun, true,true); Pos = (Pos - Sun.Position) * (float)(rnd.Next(10, 20)); // Position weiter von der Sonne entfernen. Point3 Dir = new Point3(); Dir.assign(Sun.Position - Pos); // Bewegung auf die Sonne zu. Dir.x += (float)rnd.NextDouble(); // ein wenig Varianz in der Bewegung. Dir.y += (float)rnd.NextDouble(); // ein wenig Varianz in der Bewegung. Dir.z += (float)rnd.NextDouble(); // ein wenig Varianz in der Bewegung. Dir.Normalize(); // BewegungsRichtung normalisieren. Dir *= (float)((rnd.NextDouble() * 3) + 2f) * 10f; // Speed zurechnen; float[] Color = { (float)rnd.NextDouble(), (float)rnd.NextDouble(), (float)rnd.NextDouble() }; suncount++; o2Sun __Sun = new o2Sun(Pos, Dir, Mass, Color, _Light[suncount]); Objects.Add(__Sun); AddPlanet(__Sun, rnd.Next(1, 9)); // 1 bis 8 Planeten auf die Umlaufbahn der neuen Sonne bringen. } }
/// <summary> /// Beschleunigung Richtung Bezugsobjekt /// </summary> /// <param name="o">Bezugsobjekt</param> /// <returns></returns> private Point3 a(o2Object o) { float distance = Point3.Distance(this.Position, o.Position); Point3 x = new Point3(); x.assign(Position - o.Position); float fak = (float)(-PlanetAdvanced2.G * o.Mass / Math.Pow(distance, 3)); return x * fak; }