public static Channel CratersAlgo(int sizeX, int sizeY, int numCraters, int seed) { Channel chan = new Channel(sizeX, sizeY); Console.WriteLine(); Random rand = new Random(seed); for (int i = 0; i < numCraters; ) { int x = rand.Next(0, sizeX); int y = rand.Next(0, sizeY); double radius = (rand.NextDouble() * 84.0) - 20; // Clamp //x=(x<0) ? 0 : ((x>size-1) ? size-1 : x); //x=(y<0) ? 0 : ((y>size-1) ? size-1 : y); //radius=(radius<20.0) ? 20.0 : ((radius>84.0) ? 84.0 : radius); Channel crater = (new Crater(sizeX, sizeY, x, y, radius)).toChannel(); if (crater.findMax() != 1.0) { continue; } //if(crater.findMin()!=0.0) //{ // Console.Write("!"); // continue; //} i++; drawTextProgressBar(i, numCraters); //crater.toLayer().saveAsPNG("../sims/crater_debug.png"); chan.channelAdd(crater.normalize(-0.01f, 0.01f)); } chan.normalize(); Console.WriteLine("\nRange [{0},{1}]", chan.findMin(), chan.findMax()); return chan; }
public static Channel HillsAlgo(int sizeX, int sizeY, int numHills, int seed) { Console.WriteLine(); Channel chan = new Channel(sizeX, sizeY); Random rand = new Random(seed); for (int i = 0; i < numHills; ) { int x = rand.Next(0, sizeX); int y = rand.Next(0, sizeY); double radius = ((rand.NextDouble() * 84.0) - 20); Channel crater = (new Hill(sizeX, sizeY, x, y, (float)radius)).toChannel(); if (crater.findMax() != 1.0) { continue; } i++; drawTextProgressBar(i, numHills); //crater.toLayer().saveAsPNG("../sims/crater_debug.png"); chan.channelAdd(crater.normalize(0f, 0.01f)); } chan.normalize(); Console.WriteLine("\nRange [{0},{1}]", chan.findMin(), chan.findMax()); return chan; }