]> git.tdb.fi Git - libs/math.git/commitdiff
Add multiplication and inversion operations to AffineTransformation
authorMikko Rasa <tdb@tdb.fi>
Sun, 19 May 2013 18:14:28 +0000 (21:14 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 19 May 2013 18:15:00 +0000 (21:15 +0300)
source/geometry/affinetransformation.h

index 93fb91abf29f9955ffc83cf9307092a4ff78c2cb..430619ed163702594f71b267e800e85b87876504 100644 (file)
@@ -62,6 +62,9 @@ public:
        static AffineTransformation<T, D> scaling(const LinAl::Vector<T, D> &);
        static AffineTransformation<T, D> shear(const LinAl::Vector<T, D> &, const LinAl::Vector<T, D> &);
 
+       AffineTransformation &operator*=(const AffineTransformation &);
+       AffineTransformation &invert();
+
        const LinAl::SquareMatrix<T, D+1> &get_matrix() const { return matrix; }
        operator const LinAl::SquareMatrix<T, D+1> &() const { return matrix; }
 
@@ -137,6 +140,34 @@ AffineTransformation<T, 3> AffineTransformationOps<T, 3>::rotation(const Angle<T
        return r;
 }
 
+template<typename T, unsigned D>
+inline AffineTransformation<T, D> &AffineTransformation<T, D>::operator*=(const AffineTransformation<T, D> &other)
+{
+       matrix *= other.get_matrix();
+       return *this;
+}
+
+template<typename T, unsigned D>
+inline AffineTransformation<T, D> operator*(const AffineTransformation<T, D> &at1, const AffineTransformation<T, D> &at2)
+{
+       AffineTransformation<T, D> r = at1;
+       return r *= at2;
+}
+
+template<typename T, unsigned D>
+inline AffineTransformation<T, D> &AffineTransformation<T, D>::invert()
+{
+       matrix.invert();
+       return *this;
+}
+
+template<typename T, unsigned D>
+inline AffineTransformation<T, D> invert(const AffineTransformation<T, D> &at)
+{
+       AffineTransformation<T, D> r = at;
+       return r.invert();
+}
+
 
 template<typename T, unsigned N>
 inline LinAl::Vector<T, N+1> augment_vector(const LinAl::Vector<T, N> &v, T s)