public static void AddOneObstacle() { if (obstacleCount < maxObstacleCount) { // pick a random center and radius, // loop until no overlap with other obstacles and the home base float r; Vector3 c; float minClearance; float requiredClearance = Globals.Seeker.Radius * 4; // 2 x diameter do { r = Utilities.Random(1.5f, 4); c = Vector3Helpers.RandomVectorOnUnitRadiusXZDisk() * Globals.MaxStartRadius * 1.1f; minClearance = float.MaxValue; System.Diagnostics.Debug.WriteLine(String.Format("[{0}, {1}, {2}]", c.X, c.Y, c.Z)); for (int so = 0; so < AllObstacles.Count; so++) { minClearance = TestOneObstacleOverlap(minClearance, r, AllObstacles[so].Radius, c, AllObstacles[so].Center); } minClearance = TestOneObstacleOverlap(minClearance, r, Globals.HomeBaseRadius - requiredClearance, c, Globals.HomeBaseCenter); }while (minClearance < requiredClearance); // add new non-overlapping obstacle to registry AllObstacles.Add(new SphericalObstacle(r, c)); obstacleCount++; } }
public static void AddOneObstacle() { if (obstacleCount < maxObstacleCount) { // pick a random center and radius, // loop until no overlap with other obstacles and the home base //float r = 15; //Vector3 c = Vector3.Up * r * (-0.5f * maxObstacleCount + obstacleCount); float r = Utilities.Random(0.5f, 2); Vector3 c = Vector3Helpers.RandomVectorInUnitRadiusSphere() * worldRadius * 1.1f; // add new non-overlapping obstacle to registry AllObstacles.Add(new SphericalObstacle(r, c)); obstacleCount++; } }
private static void AddOneObstacle() { if (_obstacleCount >= MAX_OBSTACLE_COUNT) { return; } // pick a random center and radius, // loop until no overlap with other obstacles and the home base //float r = 15; //Vector3 c = Vector3.Up * r * (-0.5f * maxObstacleCount + obstacleCount); float r = RandomHelpers.Random(0.5f, 2); Vector3 c = Vector3Helpers.RandomVectorInUnitRadiusSphere() * WORLD_RADIUS * 1.1f; // add new non-overlapping obstacle to registry AllObstacles.Add(new SphericalObstacle(r, c)); _obstacleCount++; }
public static void AddOneObstacle(float radius) { // pick a random center and radius, // loop until no overlap with other obstacles and the home base float r; Vector3 c; float minClearance; float requiredClearance = Globals.Seeker.Radius * 4; // 2 x diameter do { r = RandomHelpers.Random(1.5f, 4); c = Vector3Helpers.RandomVectorOnUnitRadiusXZDisk() * Globals.MAX_START_RADIUS * 1.1f; minClearance = AllObstacles.Aggregate(float.MaxValue, (current, t) => TestOneObstacleOverlap(current, r, t.Radius, c, t.Center)); minClearance = TestOneObstacleOverlap(minClearance, r, radius - requiredClearance, c, Globals.HomeBaseCenter); }while (minClearance < requiredClearance); // add new non-overlapping obstacle to registry AllObstacles.Add(new SphericalObstacle(r, c)); ObstacleCount++; }