/*****************************************************************************
** FILE IDENTIFICATION
**
-** Name: transformmatrix.cpp
-** Function: Transform Matrix routine for graphic library
-** Programmer: Kevin Rosenberg
-** Date Started: 1-22-85
+** Name: transformmatrix.cpp
+** Function: Transform Matrix routine for graphic library
+** Programmer: Kevin Rosenberg
+** Date Started: 1-22-85
**
** This is part of the CTSim program
-** Copyright (c) 1983-2001 Kevin Rosenberg
-**
-** $Id$
+** Copyright (c) 1983-2009 Kevin Rosenberg
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
mtx[2][0] = m[2][0]; mtx[2][1] = m[2][1]; mtx[2][2] = m[2][2];
}
-void
+void
TransformationMatrix2D::setTranslate (double x, double y)
{
setIdentity();
}
-void
+void
TransformationMatrix2D::setScale (double sx, double sy)
{
setIdentity();
}
-void
+void
TransformationMatrix2D::setShear (double shrx, double shry)
{
setIdentity();
mtx[0][1] = shry;
}
-void
+void
TransformationMatrix2D::setRotate (double theta)
{
double s = sin (theta);
}
-void
+void
TransformationMatrix2D::setIdentity ()
{
mtx[0][0] = 1.; mtx[0][1] = 0.; mtx[0][2] = 0.;
double determ = determinant ();
if (fabs(determ) < 1E-6) {
sys_error (ERR_WARNING, "Determinant = %g [TransformationMatrix2D::invert]", determ);
- print (std::cout);
- std::cout << std::endl;
+ print (std::cout);
+ std::cout << std::endl;
}
b[0][0] = (mtx[1][1] * mtx[2][2] - mtx[2][1] * mtx[1][2]) / determ;
b[1][0] = -(mtx[1][0] * mtx[2][2] - mtx[2][0] * mtx[1][2]) / determ;
b[2][0] = (mtx[1][0] * mtx[2][1] - mtx[2][0] * mtx[1][1]) / determ;
-
+
b[0][1] = -(mtx[0][1] * mtx[2][2] - mtx[2][1] * mtx[0][2]) / determ;
b[1][1] = (mtx[0][0] * mtx[2][2] - mtx[2][0] * mtx[0][2]) / determ;
b[2][1] = -(mtx[0][0] * mtx[2][1] - mtx[2][0] * mtx[0][1]) / determ;
-
+
b[0][2] = (mtx[0][1] * mtx[1][2] - mtx[1][1] * mtx[0][2]) / determ;
b[1][2] = -(mtx[0][0] * mtx[1][2] - mtx[1][0] * mtx[0][2]) / determ;
b[2][2] = (mtx[0][0] * mtx[1][1] - mtx[1][0] * mtx[0][1]) / determ;
}
-double
+double
TransformationMatrix2D::determinant () const
{
return
}
-void
+void
TransformationMatrix2D::transformPoint (double* pX, double *pY) const
{
double x = *pX * mtx[0][0] + *pY * mtx[1][0] + mtx[2][0];
void
TransformationMatrix2D::print (std::ostream& ostr) const
{
- std::cout << mtx[0][0] << " " << mtx[0][1] << " " << mtx[0][2] << std::endl;
- std::cout << mtx[1][0] << " " << mtx[1][1] << " " << mtx[1][2] << std::endl;
- std::cout << mtx[2][0] << " " << mtx[2][1] << " " << mtx[2][2] << std::endl;
+ std::cout << mtx[0][0] << " " << mtx[0][1] << " " << mtx[0][2] << std::endl;
+ std::cout << mtx[1][0] << " " << mtx[1][1] << " " << mtx[1][2] << std::endl;
+ std::cout << mtx[2][0] << " " << mtx[2][1] << " " << mtx[2][2] << std::endl;
}
for (int row = 0; row < 3; row++)
for (int col = 0; col < 3; col++) {
- c[row][col] = 0.;
- for (int calc = 0; calc < 3; calc++)
- c[row][col] += a.mtx[row][calc] * b.mtx[calc][col];
+ c[row][col] = 0.;
+ for (int calc = 0; calc < 3; calc++)
+ c[row][col] += a.mtx[row][calc] * b.mtx[calc][col];
}
return TransformationMatrix2D (c);