www.pudn.com > CoordWarp_Source.zip > ImcMatrix.h
#pragma once
class imcMatrix;
class imcVector
{
public:
imcVector (double X = 0.0, double Y = 0.0) { x = X; y = Y; }
imcVector (CPoint pt ) { x = pt.x; y = pt.y; }
imcVector (CSize sz ) { x = sz.cx;y = sz.cy; }
double x, y, z;
static imcVector Min (imcVector m1, imcVector m2);
static imcVector Max (imcVector m1, imcVector m2);
void operator+= (const imcVector &v);
void operator-= (const imcVector &v);
void operator*= (const double &d);
void operator/= (const double &d);
imcVector operator-() const;
imcVector operator+(const imcVector &) const;
imcVector operator-(const imcVector &) const;
imcVector operator*(const double &) const;
imcVector operator/(const double &) const;
bool operator==( const imcVector& v ) const;
bool operator!=( const imcVector& v ) const;
bool Normalise ();
imcVector Transpose () const;
double Magnitude () const;
inline operator CPoint() const
{
return CPoint (int(x), int(y));
}
};
double operator*(const imcVector &, const imcVector &);
imcVector operator*(const imcVector &, double);
imcVector operator*(double, const imcVector &);
imcVector operator/(const imcVector &, double);
typedef CArray imcVectorArray;
// Handy groupinjg of three vectors. Make its harder to miss one than an array!
struct imcVectorTriple
{
inline imcVectorTriple (imcVector v1, imcVector v2, imcVector v3)
{
v [0] = v1;
v [1] = v2;
v [2] = v3;
}
inline imcVectorTriple (CPoint p1, CPoint p2, CPoint p3)
{
v [0].x = p1.x;
v [0].y = p1.y;
v [1].x = p2.x;
v [1].y = p2.y;
v [2].x = p3.x;
v [2].y = p3.y;
}
inline imcVectorTriple () {}
imcVector v [3];
void operator+= (const imcVector &v);
void operator-= (const imcVector &v);
};
class imcMatrix
{
public:
imcMatrix ();
double m[3][3];
imcMatrix & Identity ();
imcMatrix & Translation (const imcVector &vIn);
imcMatrix & Translation (double x, double y);
imcMatrix & Scaling (const imcVector &vIn);
imcMatrix & Scaling (double x, double y);
imcMatrix & Rotating (double dAngle);
imcMatrix Inverse (double *Det) const;
double Determinant () const;
BOOL Transform (imcVector const *vFrom, imcVector *vTo, int n) const;
BOOL Transform (CPoint *vFrom, CPoint *vTo, int n) const;
BOOL Transform (CPoint *pt, int n) const;
BOOL WarpVectors (imcVectorTriple coordinatesystemFrom, imcVectorTriple coordinatesystemTo);
bool operator==( const imcMatrix& m ) const;
bool operator!=( const imcMatrix& m ) const;
};
imcMatrix operator*(const imcMatrix &, const imcMatrix &);
imcVector operator*(const imcMatrix &, const imcVector &);
CPoint operator*(const imcMatrix &, CPoint);
CRect operator*(const imcMatrix &, CRect);