OSDN Git Service

323
[psychlops/silverlight.git] / dev4 / psychlops / core / math / matrix.cs
index 9bd895f..de4a836 100644 (file)
@@ -13,11 +13,25 @@ namespace Psychlops
                }\r
 \r
                /*\r
+               public abstract Internal.MatrixExpression this[Interval row, Interval col]\r
+               {\r
+                       get;\r
+                       set;\r
+               }\r
+\r
+\r
+               /*\r
                public static Matrix operator +(Matrix m, double d)\r
                {\r
                        return new Internal.MatrixExpression();\r
                }\r
                */\r
+\r
+               public abstract int rows { get; }\r
+               public abstract int cols { get; }\r
+               public int getRows() { return rows; }\r
+               public int getCols() { return cols; }\r
+\r
        }\r
 \r
 \r
@@ -26,41 +40,56 @@ namespace Psychlops
 \r
                public class MatrixImplementation : Matrix\r
                {\r
-                       internal double[] elements;\r
-                       readonly int nrow, ncol;\r
+                       internal double[,] elements;\r
 \r
                        public MatrixImplementation(int dnrow, int dncol)\r
                        {\r
-                               nrow = dnrow;\r
-                               ncol = dncol;\r
-                               elements = new double[nrow * ncol];\r
+                               elements = new double[dnrow, dncol];\r
                        }\r
 \r
                        public override double this[int row, int col]\r
                        {\r
                                get\r
                                {\r
-                                       return elements[(row - 1) * ncol + (col - 1)];\r
+                                       return elements[row - 1, col - 1];\r
                                }\r
                                set\r
                                {\r
-                                       elements[(row - 1) * ncol + (col - 1)] = value;\r
+                                       elements[row - 1, col - 1] = value;\r
                                }\r
                        }\r
+                       /*\r
+                       public override MatrixExpression this[Interval row, Interval col]\r
+                       {\r
+                               get\r
+                               {\r
+                                       return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil());\r
+                               }\r
+                               set\r
+                               {\r
+                                       for(int r = 0, r<)\r
+                                       elements[row - 1, col - 1] = value;\r
+                               }\r
+                       }\r
+                        * */\r
+\r
+                       public override int rows { get { return elements.GetLength(0); } }\r
+                       public override int cols { get { return elements.GetLength(1); } }\r
+\r
                }\r
 \r
                public class MatrixExpression : Matrix\r
                {\r
                        MatrixImplementation imp;\r
-                       readonly int nrow, ncol;\r
-                       readonly int drow, dcol;\r
-                       \r
-                       public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)\r
+                       readonly int brow, bcol;\r
+                       readonly int erow, ecol;\r
+\r
+                       internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol)\r
                        {\r
-                               nrow = dnrow;\r
-                               ncol = dncol;\r
-                               drow = ddrow;\r
-                               dcol = ddcol;\r
+                               brow = dbrow;\r
+                               bcol = dbcol;\r
+                               erow = derow;\r
+                               ecol = decol;\r
                                imp = target;\r
                        }\r
 \r
@@ -68,13 +97,16 @@ namespace Psychlops
                        {\r
                                get\r
                                {\r
-                                       return imp.elements[(row - drow) * ncol + (col - dcol)];\r
+                                       return imp.elements[(row - 1 - brow), (col - 1 - bcol)];\r
                                }\r
                                set\r
                                {\r
-                                       imp.elements[(row - drow) * ncol + (col - dcol)] = value;\r
+                                       imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value;\r
                                }\r
                        }\r
+\r
+                       public override int rows { get { return erow - brow + 1; } }\r
+                       public override int cols { get { return ecol - bcol + 1; } }\r
                }\r
        }\r
 \r