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);