【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; 
}

结果:
在这里插入图片描述

posted @ 2022-02-28 18:46  一只雷史莱姆  阅读(297)  评论(0)    收藏  举报