public static Range InitCellularAutomata(MainProperties properties) { AllGrainsTypes = new Grain[properties.AmountOfGrains]; Range tempRange = new Range(properties.RangeWidth, properties.RangeHeight); tempRange.IsFull = false; // border AddBlackBorder(tempRange); // init grains array by white color (default) for (int i = 1; i < tempRange.Width - 1; i++) { for (int j = 1; j < tempRange.Height - 1; j++) { if (tempRange.GrainsArray[i, j] == null) { tempRange.GrainsArray[i, j] = new Grain() { Id = (int)SpecialId.Id.Empty, Color = Color.White, } } } } ; tempRange.StructureBitmap = new Bitmap(properties.RangeWidth, properties.RangeHeight); // set random starting coordinates [x,y] and color for grains Point coordinates; for (int grainNumber = 1; grainNumber <= properties.AmountOfGrains; grainNumber++) { do { coordinates = RandomCoordinates.Get(tempRange.Width, tempRange.Height, Random); }while (tempRange.GrainsArray[coordinates.X, coordinates.Y].Id != 0); AllGrainsTypes[grainNumber - 1] = new Grain() { Color = Color.FromArgb(Random.Next(10, 240), Random.Next(10, 240), Random.Next(2, 240)), Id = grainNumber, }; tempRange.GrainsArray[coordinates.X, coordinates.Y].Color = AllGrainsTypes[grainNumber - 1].Color; tempRange.GrainsArray[coordinates.X, coordinates.Y].Id = AllGrainsTypes[grainNumber - 1].Id; } return(tempRange); }
public Range AddInclusionsAfter(Range tempRange) { Point coordinates; for (int inclusionNumber = 0; inclusionNumber < AmountOfInclusions; inclusionNumber++) { do { coordinates = RandomCoordinates.Get(tempRange.Width, tempRange.Height, Random); }while (!InitBoundaries.IsOnGrainBoundaries(tempRange, coordinates)); switch (InclusionsType) { case InclusionsType.Square: AddSquareInclusion(tempRange, coordinates); break; case InclusionsType.Circular: AddCirularInclusion(tempRange, coordinates); break; } } return(tempRange); }
public Range AddInclusionsAtTheBegining(Range tempRange) { Point coordinates; for (int i = 0; i < AmountOfInclusions; i++) { do { coordinates = RandomCoordinates.Get(tempRange.Width, tempRange.Height, Random); }while (tempRange.GrainsArray[coordinates.X, coordinates.Y].Id != 0); switch (InclusionsType) { case InclusionsType.Square: AddSquareInclusion(tempRange, coordinates); break; case InclusionsType.Circular: AddCirularInclusion(tempRange, coordinates); break; } } return(tempRange); }