图形学二维复合变换的问题,请大侠指点一二
现在根据需要做出了单纯的平移变换,旋转变换,测试均没有问题。
void CTransform::Rotate(double beta)
{
//旋转变换函数
//beta<0时为顺时针,beta>0是逆时针
double rad = beta*180/PI;
Identity();
T[0][0] = cos(rad);
T[0][1] = sin(rad);
T[1][0] = -sin(rad);
T[1][1] = cos(rad);
MultiplyMatrix();//矩阵乘法
}
void CTransform::Translate(double Tx, double Ty)
{
//平移变换函数
Identity();
T[2][0] = Tx;
T[2][1] = Ty;
MultiplyMatrix();
}
但是将函数整合到一起做成复合变换函数,发现图形不旋转,并且速度与单纯的平移变换也不同。请问这是为什么?
void CTransform::CompoundTransform(double Tx, double Ty, double Beta)
{
//现将中心移至坐标原点然后以坐标原点旋转再平移回去
double rad = Beta*180/PI;
Identity();
T[2][0] = Tx;
T[2][1] = Ty;
MultiplyMatrix();
T1[0][0] = cos(rad);
T1[0][1] = sin(rad);
T1[1][0] = -sin(rad);
T1[1][1] = cos(rad);
MultiplyMatrix();
T2[2][0] = -Tx;
T2[2][1] = -Ty;
MultiplyMatrix();
}
并且中心坐标和图形的点不能同步