/* === S Y N F I G ========================================================= */
/*! \file matrix.h
** \brief Matrix definitions for 2D affine transformations
-**
+**
** $Id$
**
** \legal
private:
//! The matrix array
- value_type m00, m01, m02;
- value_type m10, m11, m12;
- value_type m20, m21, m22;
+ value_type m00, m01, m02;
+ value_type m10, m11, m12;
+ value_type m20, m21, m22;
// Index convention
- // 00 01 02
+ // 00 01 02
// 10 11 12
// 20 21 22
// vectors are premultiplied when the matrix transformation is applied
// we consider the vectors as [1]x[3] arrays.
// [1]x[3] * [3]x[3] = [1]x[3]
// vector * matrix = vector
- // In affine transformation matrixes the values of
+ // In affine transformation matrixes the values of
// m02=0, m12=0 and m22=1 for non projective transformations.
public:
//!Deafult constructor makes a identity matrix
- Matrix() {
+ Matrix() {
m00=1.0; m01=0.0; m02=0.0;
m10=0.0; m11=1.0; m12=0.0;
m20=0.0; m21=0.0; m22=1.0;
(*this).set_rotate(a);
}
//!set_identity member. Set an identity matrix
- Matrix &
- set_identity(){
+ Matrix &
+ set_identity(){
m00=1.0; m01=0.0; m02=0.0;
m10=0.0; m11=1.0; m12=0.0;
m20=0.0; m21=0.0; m22=1.0;
//! @param sx Scale by X axis
//! @param sy Scale by Y axis
//! @return A matrix reference filled with the sx, sy values
- Matrix &
+ Matrix &
set_scale(const value_type &sx, const value_type &sy){
m00=sx; m01=0.0; m02=0.0;
m10=0.0; m11=sy; m12=0.0;
//!set_rotate member function. Sets a rotate matrix
//! @param a Rotation angle counterclock wise
//! @return A matrix reference filled with the proper rotation parameters
- Matrix &
+ Matrix &
set_rotate(const Angle &a){
value_type c(Angle::cos(a).get());
value_type s(Angle::sin(a).get());
//!traslate member function. Sets a translate matrix
//! @param t Vector that defines the translation
//! @return A matrix reference filled with the proper translation parameters
- Matrix &
+ Matrix &
set_translate(const Vector &t){
m00=1.0; m01=0.0; m02=0.0;
m10=0.0; m11=1.0; m12=0.0;
m20=t[0]; m21=t[1]; m22=1.0;
return (*this);
}
-
+
//!get_transformed member function.
//! @param v 2D Vector to transform
//! @return The Vector result
- Vector
+ Vector
get_transformed(const Vector &v){
- return Vector(v[0]*m00+v[1]*m10+m20,v[0]*m01+v[1]*m11+m21);
+ return Vector(v[0]*m00+v[1]*m10+m20,v[0]*m01+v[1]*m11+m21);
}
-
+
//! operator *. Multiplication of one matrix by other
//! @param rhs the right hand side of the multiplication operation
//! @return the resulting multiplication matrix
Matrix ret;
ret.m00=m00*rhs.m00 + m01*rhs.m10 + m02*rhs.m20;
ret.m01=m00*rhs.m01 + m01*rhs.m11 + m02*rhs.m21;
- ret.m02=m00*rhs.m02 + m01*rhs.m12 + m02*rhs.m22;
-
+ ret.m02=m00*rhs.m02 + m01*rhs.m12 + m02*rhs.m22;
+
ret.m10=m10*rhs.m00 + m11*rhs.m10 + m12*rhs.m20;
ret.m11=m10*rhs.m01 + m11*rhs.m11 + m12*rhs.m21;
- ret.m12=m10*rhs.m02 + m11*rhs.m12 + m12*rhs.m22;
-
+ ret.m12=m10*rhs.m02 + m11*rhs.m12 + m12*rhs.m22;
+
ret.m20=m20*rhs.m00 + m21*rhs.m10 + m22*rhs.m20;
ret.m21=m20*rhs.m01 + m21*rhs.m11 + m22*rhs.m21;
- ret.m22=m20*rhs.m02 + m21*rhs.m12 + m22*rhs.m22;
+ ret.m22=m20*rhs.m02 + m21*rhs.m12 + m22*rhs.m22;
return ret;
}
-
+
//! operator *=. Multiplication and assign of one matrix by a number
//! @param rhs the number to multiply by
//! @return the modifed resulting multiplicated by number matrix
m00*=rhs;
m01*=rhs;
m02*=rhs;
-
+
m10*=rhs;
m11*=rhs;
m12*=rhs;
-
+
m20*=rhs;
m21*=rhs;
m22*=rhs;
//! operator +=. Sum and assign of two matrixes
//! @param rhs the matrix to sum
- //! @return modified matrix with the summed matrix
+ //! @return modified matrix with the summed matrix
Matrix
operator +=(const Matrix &rhs){
m00+=rhs.m00;
m01+=rhs.m01;
m02+=rhs.m02;
-
+
m10+=rhs.m10;
m11+=rhs.m11;
m12+=rhs.m12;
-
+
m20+=rhs.m20;
m21+=rhs.m21;
m22+=rhs.m22;
return *this;
}
-
+
//! operator *. Multiplication of one matrix by a number
//! @param rhs the number to multiply by
//! @return the resulting multiplicated by number matrix
//! operator +=. Sum and assign of two matrixes
//! @param rhs the matrix to sum
- //! @return modified matrix with the summed matrix
+ //! @return modified matrix with the summed matrix
Matrix
operator +(const Matrix &rhs){
return Matrix(*this)+=rhs;
}
-
+
};
}; // END of namespace synfig