Skip to content
Snippets Groups Projects
Matrix.cs 2.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System;
    using System.Collections.Generic;
    
    namespace WindStressPRM
    {
        /// <summary>
        /// Generic Matrix of type T
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class Matrix<T>
    
        {   
            /// <summary>
            /// origin coordinates of matrix. This must be top left corner
            /// </summary>
            public Coordinate Origin { get; set; }
            /// <summary>
            /// get coordinate of cell at index
            /// </summary>
            /// <param name="index"></param>
            /// <returns></returns>
    
            public Coordinate CellToProjection(Index index) {
    
                return new Coordinate(Origin.X + index.Row*Size.Width, Origin.Y - index.Col*Size.Height);
            }
    
            /// get index of cell for coordinate
            /// </summary>
            /// <param name="coordinate"></param>
            /// <returns></returns>
            public Index ProjectionToCell(Coordinate coordinate)
            {
                double rwDiff = (coordinate.X - Origin.X) / Size.Width;
                double colDiff = (coordinate.Y - Origin.Y) / -Size.Height;
                int iRow = (int)Math.Round(rwDiff);
                int iCol = (int)Math.Round(colDiff);
    
                if (iRow < 0 || iCol < 0 || iRow >= RowsCount() || iCol >= ColumnCount())
                {
                    throw new Exception("projectionToCell method trying to find uncorrect index");
                }
                return new Index(iRow, iCol);            
            }
            /// <summary>
    
            /// Size of cell. In meters
            /// </summary>
            public CellSize Size { get; set; }
            /// <summary>
            /// Cells Container
            /// </summary>
            public T[,] Cells { get; set; }
            /// <summary>
            /// Number of rows in matrix
            /// </summary>
            /// <returns></returns>
            public int RowsCount()
            {
                return Cells.Rank > 0 ? Cells.GetLength(0) : 0;
            }
            /// <summary>
            /// Number of columns 
            /// </summary>
            /// <returns></returns>
            public int ColumnCount()
            {
                return Cells.Rank > 1 ? Cells.GetLength(1) : 0;
            }
        }
    }