坐标系变换:从二维到三维的几何变换详解
坐标系变换:从二维到三维的几何变换详解
坐标系变换是计算几何中的一个重要概念,广泛应用于机器人学、计算机图形学等领域。本文将从二维坐标系变换开始,逐步介绍旋转变换、平移变换以及旋转-平移变换,并延伸到三维坐标系的变换方式。
二维坐标系转换
旋转变换
假设已知基坐标系XOY中的一点P(x, y),坐标原点为O,绕点O旋转θ(逆时针旋转为正值,顺时针旋转为负值),旋转后P在新坐标系X'OY'中的坐标值为(x', y')。
旋转前后的坐标关系可表示如下:
x'坐标的求解
根据投影关系,可以将OF分解为ΔAOD中的OD以及ΔPAC中的AC,根据三角形几何关系,有:
$$
OF = OD + DF = AO\cos\theta + AP\sin\theta = x\cos\theta + y\sin\theta
$$y'坐标的求解
根据投影关系,旋转后的y'坐标为PF,根据三角形几何关系,有:
$$
PF = CP - CF = CP - AD = AP\cos\theta - AO\sin\theta = y\cos\theta - x\sin\theta
$$
汇总表示为:
$$
\begin{cases}
x' = x\cos\theta + y\sin\theta \
y' = y\cos\theta - x\sin\theta
\end{cases}
$$
写成矩阵形式为:
$$
\begin{bmatrix}
x' \
y'
\end{bmatrix} =
\begin{bmatrix}
\cos\theta & \sin\theta \
-\sin\theta & \cos\theta
\end{bmatrix}
\begin{bmatrix}
x \
y
\end{bmatrix}
$$
如果是在机器人相关领域,也习惯简写为如下形式:
$$
\begin{bmatrix}
x' \
y'
\end{bmatrix} =
\begin{bmatrix}
c\theta & s\theta \
-s\theta & c\theta
\end{bmatrix}
\begin{bmatrix}
x \
y
\end{bmatrix}
$$
平移变换
假设已知基坐标系XOY中的一点P(x, y),坐标原点为O,将坐标系整体平移,假设点P随坐标系一起平移,平移后P在新坐标系X'OY'中的坐标值为(x', y')。
平移变化符合向量的加法,即:
$$
OP' = OP + PP' = OP + T(a, b)
$$
所以:
$$
\begin{cases}
x' = x + a \
y' = y + b
\end{cases}
$$
写成矩阵形式为:
$$
\begin{bmatrix}
x' \
y'
\end{bmatrix} =
\begin{bmatrix}
c\theta & s\theta \
-s\theta & c\theta
\end{bmatrix}
\begin{bmatrix}
x \
y
\end{bmatrix} +
\begin{bmatrix}
a \
b
\end{bmatrix}
$$
旋转-平移变换
旋转平移变换是以上两种情况的叠加,已知旋转平移后的坐标系X'O'Y'中的一点P'(x', y'),求P'在基坐标系中的坐标值。
可以先求出P'在旋转后的坐标系X'OY'中的坐标值,然后坐标系X'OY'平移变换到XOY上:
$$
\begin{cases}
x = x'\cos\theta + y'\sin\theta + a \
y = y'\cos\theta - x'\sin\theta + b
\end{cases}
$$
写成矩阵形式为:
$$
\begin{bmatrix}
x' \
y'
\end{bmatrix} =
\begin{bmatrix}
c\theta & s\theta \
-s\theta & c\theta
\end{bmatrix}
\begin{bmatrix}
x \
y
\end{bmatrix} +
\begin{bmatrix}
a \
b
\end{bmatrix}
$$
三维坐标系转换
旋转矩阵
绕x轴旋转
$$
R(x,\theta) =
\begin{bmatrix}
\cos\theta & -\sin \theta & 0 \
\sin\theta & \cos\theta & 0 \
0 & 0 & 1
\end{bmatrix} =
\begin{bmatrix}
c\theta & -s\theta & 0 \
s\theta & c\theta & 0 \
0 & 0 & 1
\end{bmatrix}
$$绕y轴旋转
$$
R(y,\theta) =
\begin{bmatrix}
1 & 0 & 0 \
0 & \cos\theta & -\sin\theta \
0 & \sin\theta & \cos\theta
\end{bmatrix} =
\begin{bmatrix}
1 & 0 & 0 \
0 & c\theta & -s\theta \
0 & s\theta & c\theta
\end{bmatrix}
$$绕z轴旋转
$$
R(z,\theta) =
\begin{bmatrix}
\cos\theta & 0 & \sin\theta \
0 & 1 & 0 \
-\sin\theta & 0 & \cos\theta
\end{bmatrix} =
\begin{bmatrix}
c\theta & 0 & s\theta \
0 & 1 & 0 \
-s\theta & 0 & c\theta
\end{bmatrix}
$$