Assignment0
前边一大半主要是安装虚拟机保证运行一致,这里就跳过了,到实际的问题:点旋转和平移

使用Eigen表示向量
点$P=(2,1)$ 表示为 Eigen::Vector3f point(2, 1, 1);,最后一位是用于齐次坐标,为1时表示是一个点
点旋转矩阵
**二维点旋转矩阵**比较简单,推导主要是通过设A、B、C、D四个变量,找两个特殊点求解
三维点旋转矩阵可分解为分别绕三个轴旋转
注意:上述提到的公式都是按照逆时针旋转的矩阵,顺时针相当于逆时针旋转$-θ$,本题只涉及二维点旋转
平移
平移可以简单通过加法实现,但是如果想统一格式,用一个矩阵表示点的所有变换操作,就需要用到齐次坐标,利用齐次坐标表示转换矩阵,可以把旋转缩放平移同时塞到一个矩阵中。下图为只进行平移操作的齐次转换矩阵
旋转矩阵的齐次坐标表达为:
平移 (1,2),只需要把tx换为1,ty换为2,得到平移矩阵的齐次坐标表达为:

旋转和平移组合
得到最终旋转+平移的矩阵为:

代码实现
std::sin和std::cos的参数为弧度制,用角度/180*Π得到。例如cos45°可以表达为std::cos(45.0/180.0*acos(-1)),其中acos(-1)就等于Π
|
|