【GAMES101】作业0——利用齐次坐标对点进行变换
题目:
给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45◦,再平移 (1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)
知识点复习:
齐次坐标下2D点的表示:(x,y,1)T
齐次坐标下2D向量的表示:(x,y,0)T
齐次坐标缩放、选择、平移的变换矩阵
将矩阵左乘需要变换的点即可得到变换后的点坐标,这种矩阵左乘可以实现复合变换。举例:先旋转45度(逆时针)再向右平移(1,0)的矩阵相乘变换。
本题只需要将上面平移的(1,0)改为(1,2)即可
本题代码:
int main(){
Eigen::Vector3f p(2.0f,1.0f,1.0f);
double theta =45.0/180.0*M_PI;
//定义啊a,b,c,d,tx,ty
float a=std::cos(theta);
float b=-std::sin(theta);
float c=std::sin(theta);
float d=std::cos(theta);
float tx=1.0f;
float ty=2.0f;
//定义矩阵,T是平移变换的矩阵,M是旋转变换的矩阵
Eigen::Matrix3f T,M;
T<<1.0,0.0,tx,
0.0,1.0,ty,
0.0,0.0,1.0;
M<<a,b,0.0,
c,d,0.0,
0.0,0.0,1.0;
std::cout<<T*(M*p)<<std::endl;
return 0;
}
结果:


浙公网安备 33010602011771号