X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=dev4%2Fpsychlops%2Fcore%2Fmath%2Fmatrix.cs;h=de4a8363ad29e9035e293d4b0d8e82196d3ead60;hb=70d45b57ef59585bb8b82123d054014255d260ca;hp=9bd895ff53a059649bbec85be393cfc0a8991ee6;hpb=c37e9a5c4af3c1917504ba88864ebcd6c536a0d5;p=psychlops%2Fsilverlight.git diff --git a/dev4/psychlops/core/math/matrix.cs b/dev4/psychlops/core/math/matrix.cs index 9bd895f..de4a836 100644 --- a/dev4/psychlops/core/math/matrix.cs +++ b/dev4/psychlops/core/math/matrix.cs @@ -13,11 +13,25 @@ namespace Psychlops } /* + public abstract Internal.MatrixExpression this[Interval row, Interval col] + { + get; + set; + } + + + /* public static Matrix operator +(Matrix m, double d) { return new Internal.MatrixExpression(); } */ + + public abstract int rows { get; } + public abstract int cols { get; } + public int getRows() { return rows; } + public int getCols() { return cols; } + } @@ -26,41 +40,56 @@ namespace Psychlops public class MatrixImplementation : Matrix { - internal double[] elements; - readonly int nrow, ncol; + internal double[,] elements; public MatrixImplementation(int dnrow, int dncol) { - nrow = dnrow; - ncol = dncol; - elements = new double[nrow * ncol]; + elements = new double[dnrow, dncol]; } public override double this[int row, int col] { get { - return elements[(row - 1) * ncol + (col - 1)]; + return elements[row - 1, col - 1]; } set { - elements[(row - 1) * ncol + (col - 1)] = value; + elements[row - 1, col - 1] = value; } } + /* + public override MatrixExpression this[Interval row, Interval col] + { + get + { + return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil()); + } + set + { + for(int r = 0, r<) + elements[row - 1, col - 1] = value; + } + } + * */ + + public override int rows { get { return elements.GetLength(0); } } + public override int cols { get { return elements.GetLength(1); } } + } public class MatrixExpression : Matrix { MatrixImplementation imp; - readonly int nrow, ncol; - readonly int drow, dcol; - - public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol) + readonly int brow, bcol; + readonly int erow, ecol; + + internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol) { - nrow = dnrow; - ncol = dncol; - drow = ddrow; - dcol = ddcol; + brow = dbrow; + bcol = dbcol; + erow = derow; + ecol = decol; imp = target; } @@ -68,13 +97,16 @@ namespace Psychlops { get { - return imp.elements[(row - drow) * ncol + (col - dcol)]; + return imp.elements[(row - 1 - brow), (col - 1 - bcol)]; } set { - imp.elements[(row - drow) * ncol + (col - dcol)] = value; + imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value; } } + + public override int rows { get { return erow - brow + 1; } } + public override int cols { get { return ecol - bcol + 1; } } } }