diff --git a/matrix/Matrix.hpp b/matrix/Matrix.hpp index 0172669a5b..c3b47ce839 100644 --- a/matrix/Matrix.hpp +++ b/matrix/Matrix.hpp @@ -407,12 +407,21 @@ public: slice<1,N>(i,0) = row_in.transpose(); } + void setRow(size_t i, Type val) + { + slice<1,N>(i,0) = val; + } void setCol(size_t j, const Matrix &column) { slice(0,j) = column; } + void setCol(size_t j, Type val) + { + slice(0,j) = val; + } + void setZero() { memset(_data, 0, sizeof(_data)); diff --git a/matrix/Slice.hpp b/matrix/Slice.hpp index 6fc3010b34..21b2a4f09a 100644 --- a/matrix/Slice.hpp +++ b/matrix/Slice.hpp @@ -119,9 +119,9 @@ public: } } - Vector diag() + Vector diag() const { - Slice& self = *this; + const Slice& self = *this; Vector res; for (size_t j = 0; j < (P class Slice; -template +template class SquareMatrix : public Matrix { public: diff --git a/test/matrixAssignment.cpp b/test/matrixAssignment.cpp index 8774cc38c7..b64a0e1b42 100644 --- a/test/matrixAssignment.cpp +++ b/test/matrixAssignment.cpp @@ -72,6 +72,28 @@ int main() TEST(isEqual(m3, m2)); + // set rows and columns to value + Matrix3f m2e(data2d); + + float data2e_check1[3][3] = { + {1, 11, 3}, + {4, 11, 6}, + {7, 11, 9} + }; + Matrix3f m2e_check1(data2e_check1); + + float data2e_check2[3][3] = { + {1, 11, 3}, + {4, 11, 6}, + {0, 0, 0} + }; + Matrix3f m2e_check2(data2e_check2); + + m2e.setCol(1, 11); + TEST(isEqual(m2e, m2e_check1)); + m2e.setRow(2, 0); + TEST(isEqual(m2e, m2e_check2)); + float data_row_02_swap[9] = { 7, 8, 9, 4, 5, 6,