Exemple #1
0
        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);
        }