Exemplo n.º 1
0
        /// <summary>
        /// Metoda factory generująca koło
        /// </summary>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość możliwych wartości</param>
        /// <returns>Układ początkowy z kołem</returns>
        internal static InitialConditionsGrid CircleFactory(int size=30,int stateCount=SPDAssets.MAX)
        {
            InitialConditionCell[,] ic = new InitialConditionCell[size, size];
            List<InitialConditionCell>[] setLists = new List<InitialConditionCell>[SPDAssets.MAX];
            for (int i = 0; i < setLists.Length; i++) setLists[i] = new List<InitialConditionCell>();
            for (int i = 0; i < size; i++)
                for (int j = 0; j < size; j++)
                {
                    InitialConditionCell c = new InitialConditionCell(i, j, 0, -1);
                    for (int k = 0;k<stateCount-1;k++)
                    {

                        if ((i - size/2) * (i - size/2) + (j - size/2) * (j - size/2) <= (size/2)*(size/2) / ((k+1)*(k + 1)))
                        {
                            c.Set = k;
                        }
                    }
                    if (c.Set < 0)
                    {
                        c.Set = stateCount-1;
                    }
                    ic[i, j] = c;
                    setLists[c.Set].Add(c);
                }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = ic,
                CellSets = sets
            };
            return ig;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Metoda generująca macierz losowego układu
        /// </summary>
        /// <param name="r">Randomizer</param>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość stanów</param>
        /// <returns>Macierz układu</returns>
        internal static InitialConditionsGrid GenerateRandom(Random r, int size = 100, int stateCount = SPDAssets.MAX)
        {
            int x = size;
            int y = size;

            List <InitialConditionCell>[] setLists = new List <InitialConditionCell> [stateCount];
            for (int i = 0; i < setLists.Length; i++)
            {
                setLists[i] = new List <InitialConditionCell>();
            }
            InitialConditionCell[,] grid = new InitialConditionCell[x, y];
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {
                    int k = r.Next(setLists.Length);
                    InitialConditionCell c = new InitialConditionCell(i, j, k, k);
                    grid[i, j] = c;
                    setLists[k].Add(c);
                }
            }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = grid,
                CellSets = sets
            };

            return(ig);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Metoda factory generująca przekątną
        /// </summary>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość możliwych wartości</param>
        /// <returns>Układ początkowy z przekątną</returns>
        internal static InitialConditionsGrid DiagonalFactory(int size = 30, int stateCount = SPDAssets.MAX)
        {
            InitialConditionCell[,] ic = new InitialConditionCell[size, size];
            List <InitialConditionCell>[] setLists = new List <InitialConditionCell> [stateCount];
            for (int i = 0; i < setLists.Length; i++)
            {
                setLists[i] = new List <InitialConditionCell>();
            }
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    int k = Math.Abs(i - j);
                    int m = Math.Max(ic.GetLength(0), ic.GetLength(1));
                    InitialConditionCell c = new InitialConditionCell(i, j, 0, k * (stateCount) / m);


                    ic[i, j] = c;
                    setLists[c.Set].Add(c);
                }
            }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = ic,
                CellSets = sets
            };

            return(ig);
        }
Exemplo n.º 4
0
        internal static InitialConditions FromCellArray(Tuple <int, float>[,] cells, string getFileName = "FileLoaded")
        {
            InitialConditionsGrid icg = InitialConditionsGrid.FromCellArray(cells);

            return(new InitialConditions {
                Name = getFileName, Grid = icg
            });
        }
Exemplo n.º 5
0
        internal static InitialConditionsGrid NowakMayFactory(int size = 31, int StateCount = SPDAssets.MAX)
        {
            InitialConditionCell[,] ic = new InitialConditionCell[size, size];
            List <InitialConditionCell>[] setLists = new List <InitialConditionCell> [SPDAssets.MAX];
            for (int i = 0; i < setLists.Length; i++)
            {
                setLists[i] = new List <InitialConditionCell>();
            }
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    int k = -1;
                    if (size % 2 == 0)
                    {
                        if (i == size / 2 || i + 1 == size / 2)
                        {
                            if (j == size / 2 || j + 1 == size / 2)
                            {
                                k = 0;
                            }
                        }
                    }
                    else
                    {
                        if (i == size / 2)
                        {
                            if (j == size / 2)
                            {
                                k = 0;
                            }
                        }
                    }
                    if (k < 0)
                    {
                        k = StateCount - 1;
                    }
                    InitialConditionCell c = new InitialConditionCell(i, j, k, k);
                    ic[i, j] = c;
                    setLists[c.Set].Add(c);
                }
            }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = ic,
                CellSets = sets
            };

            return(ig);
        }
Exemplo n.º 6
0
        private int[,] Transform(InitialConditionsGrid ig)
        {
            var ar = ig.CellGrid;

            int[,] result = new int[ar.GetLength(0), ar.GetLength(1)];
            for (int i = 0; i < ar.GetLength(0); i++)
            {
                for (int j = 0; j < ar.GetLength(1); j++)
                {
                    result[i, j] = ar[i, j].Value;
                }
            }
            return(result);
        }
Exemplo n.º 7
0
 public static InitialConditions CreateICFromPick(PointMatrixPick Condition)
 {
     var IC = new InitialConditions();
     var IG = new InitialConditionsGrid();
     IG.CellGrid = new InitialConditionCell[Condition.Indices.GetLength(0), Condition.Indices.GetLength(1)];
     for (int i = 0; i < Condition.Indices.GetLength(0); i++)
     {
         for (int j = 0; j < Condition.Indices.GetLength(1); j++)
         {
             IG.CellGrid[i, j] = new InitialConditionCell(i, j, Condition.Indices[i, j], Condition.Indices[i, j]);
         }
     }
     IC.Grid = IG;
     return IC;
 }
Exemplo n.º 8
0
        public static InitialConditions CreateICFromPick(PointMatrixPick Condition)
        {
            var IC = new InitialConditions();
            var IG = new InitialConditionsGrid();

            IG.CellGrid = new InitialConditionCell[Condition.Indices.GetLength(0), Condition.Indices.GetLength(1)];
            for (int i = 0; i < Condition.Indices.GetLength(0); i++)
            {
                for (int j = 0; j < Condition.Indices.GetLength(1); j++)
                {
                    IG.CellGrid[i, j] = new InitialConditionCell(i, j, Condition.Indices[i, j], Condition.Indices[i, j]);
                }
            }
            IC.Grid = IG;
            return(IC);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Metoda factory generująca koło
        /// </summary>
        /// <param name="reversed">Czy wartości mają być odwrócone</param>
        /// <param name="size">Rozmiar</param>
        /// <param name="stateCount">Ilość możliwych wartości komórek</param>
        /// <returns>Układ początkowy z kołem</returns>
        internal static InitialConditions CircleFactory(bool reversed = false, int size = 30, int stateCount = SPDAssets.MAX, bool twoState = false)
        {
            InitialConditionsGrid ig = InitialConditionsGrid.CircleFactory(size, twoState ? 2 : stateCount);

            ig.Transform(GetTransformation(twoState ? 2 : stateCount, reversed), twoState ? 2 : stateCount);
            if (twoState)
            {
                ig.Transform((x) => (x == 0 ? 0 : stateCount - 1), 2);
            }
            var ic = new InitialConditions
            {
                Name = "Koło " + (reversed ? "- odwrócone kolory" : ""),
                Grid = ig
            };

            return(ic);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Metoda generująca losowy układ
        /// </summary>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość możliwych wartości komórek</param>
        /// <returns>Układ początkowy</returns>
        internal static InitialConditions GenerateRandom(int size = 100, int stateCount = SPDAssets.MAX, bool twoState = false)
        {
            Random r    = new Random();
            var    Grid = InitialConditionsGrid.GenerateRandom(r, size, twoState?2:stateCount);

            Grid.Transform(GetTransformation(twoState ? 2 : stateCount), twoState ? 2 : stateCount);
            if (twoState)
            {
                Grid.Transform((x) => (x == 0 ? 0 : stateCount - 1), 2);
            }

            var ic = new InitialConditions
            {
                Name = "Losowy" + r.Next(),
                Grid = Grid
            };

            return(ic);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Metoda factory generująca koło
        /// </summary>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość możliwych wartości</param>
        /// <returns>Układ początkowy z kołem</returns>
        internal static InitialConditionsGrid CircleFactory(int size = 30, int stateCount = SPDAssets.MAX)
        {
            InitialConditionCell[,] ic = new InitialConditionCell[size, size];
            List <InitialConditionCell>[] setLists = new List <InitialConditionCell> [SPDAssets.MAX];
            for (int i = 0; i < setLists.Length; i++)
            {
                setLists[i] = new List <InitialConditionCell>();
            }
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    InitialConditionCell c = new InitialConditionCell(i, j, 0, -1);
                    for (int k = 0; k < stateCount - 1; k++)
                    {
                        if ((i - size / 2) * (i - size / 2) + (j - size / 2) * (j - size / 2) <= (size / 2) * (size / 2) / ((k + 1) * (k + 1)))
                        {
                            c.Set = k;
                        }
                    }
                    if (c.Set < 0)
                    {
                        c.Set = stateCount - 1;
                    }
                    ic[i, j] = c;
                    setLists[c.Set].Add(c);
                }
            }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = ic,
                CellSets = sets
            };

            return(ig);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Metoda factory generująca przekątną
        /// </summary>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość możliwych wartości</param>
        /// <returns>Układ początkowy z przekątną</returns>
        internal static InitialConditionsGrid DiagonalFactory(int size=30,int stateCount=SPDAssets.MAX)
        {
            InitialConditionCell[,] ic = new InitialConditionCell[size, size];
            List<InitialConditionCell>[] setLists = new List<InitialConditionCell>[stateCount];
            for (int i = 0; i < setLists.Length; i++) setLists[i] = new List<InitialConditionCell>();
            for (int i = 0; i < size; i++)
                for (int j = 0; j < size; j++)
                {
                    int k = Math.Abs(i - j);
                    int m = Math.Max(ic.GetLength(0), ic.GetLength(1));
                    InitialConditionCell c = new InitialConditionCell(i, j, 0, k * (stateCount) / m);

                    ic[i, j] = c;
                    setLists[c.Set].Add(c);
                }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = ic,
                CellSets = sets
            };
            return ig;
        }
Exemplo n.º 13
0
 internal static InitialConditionsGrid NowakMayFactory(int size = 31, int StateCount = SPDAssets.MAX)
 {
     InitialConditionCell[,] ic = new InitialConditionCell[size, size];
     List<InitialConditionCell>[] setLists = new List<InitialConditionCell>[SPDAssets.MAX];
     for (int i = 0; i < setLists.Length; i++) setLists[i] = new List<InitialConditionCell>();
     for (int i = 0; i < size; i++)
         for (int j = 0; j < size; j++)
         {
             int k=-1;
             if (size%2 == 0)
             {
                 if (i == size/2 || i + 1 == size/2)
                 {
                     if (j == size / 2 || j + 1 == size / 2)
                     {
                         k = 0;
                     }
                 }
             }
             else
             {
                 if (i == size / 2)
                 {
                     if (j == size / 2 )
                     {
                         k = 0;
                     }
                 }
             }
             if (k < 0) k = StateCount - 1;
             InitialConditionCell c = new InitialConditionCell(i,j,k,k);
             ic[i, j] = c;
             setLists[c.Set].Add(c);
         }
     var sets = setLists.Select(a => a.ToArray()).ToArray();
     InitialConditionsGrid ig = new InitialConditionsGrid
     {
         CellGrid = ic,
         CellSets = sets
     };
     return ig;
 }
Exemplo n.º 14
0
        /// <summary>
        /// Metoda generująca macierz losowego układu
        /// </summary>
        /// <param name="r">Randomizer</param>
        /// <param name="size">Rozmiar układu</param>
        /// <param name="stateCount">Ilość stanów</param>
        /// <returns>Macierz układu</returns>
        internal static InitialConditionsGrid GenerateRandom(Random r,int size=100,int stateCount=SPDAssets.MAX)
        {
            int x = size;
            int y = size;
            List<InitialConditionCell>[] setLists = new List<InitialConditionCell>[stateCount];
            for(int i=0;i<setLists.Length;i++) setLists[i]=new List<InitialConditionCell>();
            InitialConditionCell[,] grid = new InitialConditionCell[x,y];
            for(int i=0;i<x;i++)
                for (int j = 0; j < y; j++)
                {
                    int k = r.Next(setLists.Length);
                    InitialConditionCell c = new InitialConditionCell(i,j,k,k);
                    grid[i, j] = c;
                    setLists[k].Add(c);

                }
            var sets = setLists.Select(a => a.ToArray()).ToArray();
            InitialConditionsGrid ig = new InitialConditionsGrid
            {
                CellGrid = grid,
                CellSets = sets
            };
            return ig;
        }
Exemplo n.º 15
0
 private int[,] Transform(InitialConditionsGrid ig)
 {
     var ar = ig.CellGrid;
     int[,] result = new int[ar.GetLength(0), ar.GetLength(1)];
     for (int i = 0; i < ar.GetLength(0); i++)
         for (int j = 0; j < ar.GetLength(1); j++)
             result[i, j] = ar[i, j].Value;
     return result;
 }