X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgeometry%2Faffinetransformation.h;h=0e377baaa51d633186969ace978494d79edfccf1;hb=3d124f6903553a9fc54341aba1b6f565c6d442f2;hp=e0ca370d66aa74b918f307497a065cc3deea396c;hpb=6ff13022b53830d35283905d562c2ef3af198cc1;p=libs%2Fmath.git diff --git a/source/geometry/affinetransformation.h b/source/geometry/affinetransformation.h index e0ca370..0e377ba 100644 --- a/source/geometry/affinetransformation.h +++ b/source/geometry/affinetransformation.h @@ -62,6 +62,9 @@ public: static AffineTransformation scaling(const LinAl::Vector &); static AffineTransformation shear(const LinAl::Vector &, const LinAl::Vector &); + AffineTransformation &operator*=(const AffineTransformation &); + AffineTransformation &invert(); + const LinAl::SquareMatrix &get_matrix() const { return matrix; } operator const LinAl::SquareMatrix &() const { return matrix; } @@ -81,7 +84,7 @@ AffineTransformation AffineTransformation::translation(const LinAl:: { AffineTransformation r; for(unsigned i=0; i AffineTransformationOps::rotation(const Angle -inline LinAl::Vector augment_vector(const LinAl::Vector &v, T s) +template +inline AffineTransformation &AffineTransformation::operator*=(const AffineTransformation &other) { - LinAl::Vector r; - for(unsigned i=0; i -inline LinAl::Vector reduce_vector(const LinAl::Vector &v) +template +inline AffineTransformation operator*(const AffineTransformation &at1, const AffineTransformation &at2) { - LinAl::Vector r; - for(unsigned i=0; i r = at1; + return r *= at2; } -template -inline LinAl::Vector divide_vector(const LinAl::Vector &v) +template +inline AffineTransformation &AffineTransformation::invert() { - LinAl::Vector r; - for(unsigned i=0; i +inline AffineTransformation invert(const AffineTransformation &at) +{ + AffineTransformation r = at; + return r.invert(); +} template inline LinAl::Vector AffineTransformation::transform(const LinAl::Vector &v) const { - return reduce_vector(matrix*augment_vector(v, T(1))); + return LinAl::Vector(matrix*LinAl::Vector(v, T(1))); } template inline LinAl::Vector AffineTransformation::transform_linear(const LinAl::Vector &v) const { - return reduce_vector(matrix*augment_vector(v, T(0))); + return LinAl::Vector(matrix*LinAl::Vector(v, T(0))); } } // namespace Geometry