public override Asteroid MakeAsteroidWithoutGold() { Asteroid asteroid; List <Material> material = new List <Material>(); material.Add(Materials.SiliconDioxide); material.Add(Materials.Carbon); material.Add(Materials.Water); material.Add(Materials.Iron); material.Add(Materials.Nickel); material.Add(Materials.Magnesium); material.Add(Materials.Cobalt); material.Add(Materials.Uranium); bool creating = true; do { int originalRadius = random.Next(0, 100); asteroid = new Asteroid(originalRadius, material[random.Next(7)]); for (int i = 0; i < random.Next(8); i++) { int x = random.Next(-1 * originalRadius, originalRadius); int y = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - x * x)), (int)Math.Floor(Math.Sqrt(10000 - x * x))); int z = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - x * x)), (int)Math.Floor(Math.Sqrt(10000 - x * x))); Coordinate center = new Coordinate(x, y, z); int newRadius = (int)Math.Floor(100 - center.MakeVector().Magnitude()); if (newRadius > 0) { int r = random.Next(0, newRadius); asteroid.AddShape(new Sphere(center, material[random.Next(7)], r)); } } int xG = random.Next(-1 * originalRadius, originalRadius); int yG = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - xG * xG)), (int)Math.Floor(Math.Sqrt(10000 - xG * xG))); int zG = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - xG * xG)), (int)Math.Floor(Math.Sqrt(10000 - xG * xG))); Coordinate centerG = new Coordinate(xG, yG, zG); var reflectancy = asteroid.GetAverageReflectance(); var mass = asteroid.GetMass() / 2000; var radius = asteroid.GetMaxRad(); var centerMass = asteroid.GetCenterOfMass().X; var modReflectancy = 820.313 * Math.Pow(reflectancy, 4) - 1662.62 * reflectancy * reflectancy * reflectancy + 1125.17 * reflectancy * reflectancy - 81.6402 * reflectancy + 8.88492; var modMass = 8.34288e-38 * Math.Pow(mass, 6) - 5.01129e-30 * Math.Pow(mass, 5) + 1.15266e-22 * Math.Pow(mass, 4) - 1.28265e-15 * mass * mass * mass + 6.94875e-9 * mass * mass - 0.017904 * mass + 16155.7; var modRadius = 5000 - 124.3969 * radius - 2.977055 * radius * radius + 0.1318183 * radius * radius * radius - 0.001601738 * radius * radius * radius * radius + 0.000006278571 * radius * radius * radius * radius * radius; var modCenterMass = (489 * centerMass * centerMass * centerMass * centerMass) / 5000000 + (481 * centerMass * centerMass * centerMass) / 62500 - (6973 * centerMass * centerMass) / 10000 + (2327 * centerMass) / 50 + 9843; var relatedModCenterMass = 4.95384e-25 * Math.Pow(modCenterMass, 7) - 4.32449e-20 * Math.Pow(modCenterMass, 6) + 1.51001e-15 * Math.Pow(modCenterMass, 5) - 2.68853e-11 * Math.Pow(modCenterMass, 4) + 2.57731e-7 * modCenterMass * modCenterMass * modCenterMass - 0.00130207 * modCenterMass * modCenterMass + 3.34203 * modCenterMass - 1653.05; // var relatedModMass = (1367 * modMass * modMass * modMass) / 1141672000000000.0 + (122487 * modMass * modMass) / 1141672000000.0 + (1487989 * modMass) / 570836000.0 + 18380585.0 / 142709; if (Math.Abs(relatedModMass - modReflectancy) <= 15) { if (Math.Abs(relatedModCenterMass - modRadius) <= 500) { creating = false; //var masss = asteroid.GetMass(); //var modifiedMass = 8.34288e-38 * Math.Pow(masss, 6) - 5.01129e-30 * Math.Pow(masss, 5) + 1.15266e-22 * Math.Pow(masss, 4) - 1.28265e-15 * masss * masss * masss + 6.94875e-9 * masss * masss - 0.017904 * masss + 16155.7; //Debug.Print("The mass is " + masss + " and so the modified mass is " + modifiedMass); //var reflect = asteroid.GetAverageReflectance(); //var modR = 820.313 * Math.Pow(reflect, 4) - 1662.62 * reflect * reflect * reflect + 1125.17 * reflect * reflect - 81.6402 * reflect + 8.88492; //Debug.Print("The reflectancy is " + reflect + " and so the modified reflectancy is " + modR); } } } while (creating); return(asteroid); }
public override Asteroid MakeAsteroidWithGold() { Asteroid asteroid; List <Material> material = new List <Material>(); material.Add(Materials.Gold); material.Add(Materials.SiliconDioxide); material.Add(Materials.Carbon); material.Add(Materials.Water); material.Add(Materials.Iron); material.Add(Materials.Nickel); material.Add(Materials.Magnesium); material.Add(Materials.Cobalt); material.Add(Materials.Uranium); bool creating = true; do { int originalRadius = random.Next(0, 100); asteroid = new Asteroid(originalRadius, material[random.Next(8)]); for (int i = 0; i < random.Next(8); i++) { int x = random.Next(-1 * originalRadius, originalRadius); int y = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - x * x)), (int)Math.Floor(Math.Sqrt(10000 - x * x))); int z = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - x * x)), (int)Math.Floor(Math.Sqrt(10000 - x * x))); Coordinate center = new Coordinate(x, y, z); int newRadius = (int)Math.Floor(100 - center.MakeVector().Magnitude()); if (newRadius > 0) { int r = random.Next(0, newRadius); asteroid.AddShape(new Sphere(center, material[random.Next(8)], r)); } } bool golding = true; while (golding) { int xG = random.Next(-1 * originalRadius, originalRadius); int yG = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - xG * xG)), (int)Math.Floor(Math.Sqrt(10000 - xG * xG))); int zG = random.Next(-1 * (int)Math.Floor(Math.Sqrt(10000 - xG * xG)), (int)Math.Floor(Math.Sqrt(10000 - xG * xG))); Coordinate centerG = new Coordinate(xG, yG, zG); int newRadiusG = (int)Math.Floor(100 - centerG.MakeVector().Magnitude()); if (newRadiusG > 0) { int r = random.Next(0, newRadiusG); asteroid.AddShape(new Sphere(centerG, material[0], r)); golding = false; } } var reflectancy = asteroid.GetAverageReflectance(); var mass = asteroid.GetMass() / 2000; var radius = asteroid.GetMaxRad(); var centerMass = asteroid.GetCenterOfMass().X; var modReflectancy = 820.313 * Math.Pow(reflectancy, 4) - 1662.62 * reflectancy * reflectancy * reflectancy + 1125.17 * reflectancy * reflectancy - 81.6402 * reflectancy + 8.88492; // var modMass = 8.34288e-38 * Math.Pow(mass, 6) - 5.01129e-30 * Math.Pow(mass, 5) + 1.15266e-22 * Math.Pow(mass, 4) - 1.28265e-15 * mass * mass * mass + 6.94875e-9 * mass * mass - 0.017904 * mass + 16155.7; // var modRadius = 5000 - 124.3969 * radius - 2.977055 * radius * radius + 0.1318183 * radius * radius * radius - 0.001601738 * radius * radius * radius * radius + 0.000006278571 * radius * radius * radius * radius * radius; // var modCenterMass = (489 * centerMass * centerMass * centerMass * centerMass) / 5000000 + (481 * centerMass * centerMass * centerMass) / 62500 - (6973 * centerMass * centerMass) / 10000 + (2327 * centerMass) / 50 + 9843; // var relatedModMass = -(8410379 * Math.Pow(modMass, 4)) / 9894706676400000000000000.0 - (838801 * modMass * modMass * modMass) / 382922085000000000 - (1699379619577 * modMass * modMass) / 9894706676400000000 - (143522515993 * modMass) / 77302395909375 + 15227188723 / 149241428; // var relatedModCenterMass = -2.38103e-25 * Math.Pow(modCenterMass, 7) + 2.3473e-20 * Math.Pow(modCenterMass, 6) + -8.92679e-16 * Math.Pow(modCenterMass, 5) + 1.63324e-11 * Math.Pow(modCenterMass, 4) - 1.47561e-7 * Math.Pow(modCenterMass, 3) + 0.000635326 * modCenterMass * modCenterMass - 1.53641 * modCenterMass + 4477.78; // //Debug.Print("Mass " + mass + " Reflect " + reflectancy + " \n and modified Mass is " + modMass + " and modified Reflect is " + modReflectancy + " \n and the relation value is " + relatedModMass); //Debug.Print("The dif is " + Math.Abs(relatedModMass - modReflectancy)); //Debug.Print("Center of Mass " + centerMass + " Radius " + radius); //Debug.Print("Mod Center " + modCenterMass + " and mod Radius " + modRadius + " and relation is " + relatedModCenterMass); Debug.Print("The dif is " + Math.Abs(relatedModCenterMass - modRadius)); if (Math.Abs(relatedModMass - modReflectancy) <= 15) { if (Math.Abs(relatedModCenterMass - modRadius) <= 750) { //Debug.Print(modMass + " is the modMass " + relatedModMass + " is the related mod mass and " + modReflectancy + " is the mod reflectivity which it should equal "); creating = false; //var masss = asteroid.GetMass()/60; //var modifiedMass = 8.34288e-38 * Math.Pow(masss, 6) - 5.01129e-30 * Math.Pow(masss, 5) + 1.15266e-22 * Math.Pow(masss, 4) - 1.28265e-15 * masss * masss * masss + 6.94875e-9 * masss * masss - 0.017904 * masss + 16155.7; //Debug.Print("The mass is " + masss + " and so the modified mass is " + modifiedMass); //var reflect = asteroid.GetAverageReflectance(); //var modR = 820.313 * Math.Pow(reflect, 4) - 1662.62 * reflect * reflect * reflect + 1125.17 * reflect * reflect - 81.6402 * reflect + 8.88492; //Debug.Print("The reflectancy is " + reflect + " and so the modified reflectancy is " + modR); } } } while (creating); return(asteroid); }