计算机图形:三维坐标系变换
将对象的描述从一个坐标系转换到另一个,在图形应用非常重要。本文主要从坐标的角度,探讨二维、三维空间下的对象如何从一个坐标系转换到另一个坐标系。
坐标系:除了笛卡尔坐标系,有极坐标、球面坐标、椭圆坐标等。这里仅考虑笛卡尔坐标系。
二维坐标系变换
由旋转角进行坐标系转换
坐标轴的正交变换:
其中,\(\bm{e_1}=(1,0)^A,\bm{e_2=}(0,1)^A\)是A的基向量;\(\bm{e_1'}=(1,0)^B,\bm{e_2'}=(0,1)^B\)是B的基向量.
含义:2D空间下,2个坐标系:A为\(xy\)坐标系,B为\(x'y'\)坐标系。其中,\(xy\)系统原点\(O(0,0)^A\),将其绕原点逆时针旋转θ角,然后平移至\(O'(x_0,y_0)^A\)处,得到\(x'y'\)坐标系。
tips:A系统下坐标,记为\((x,y)^A\);B系统下坐标,记为\((x,y)^B\). 如果不注明,默认是A系统坐标.
问题:A系统任一点\(P(x,y)^A\),如何转换到B系统的点\(P'(x', y')^B\)?
点的坐标转换与坐标轴的转换,方向相反,即
于是,可分两步得到复合变换矩阵M:
- T: 将\(O'(x_0,y_0)\)平移到\(O(0,0)\);
- R: 将\(x'\)轴顺时针旋转\(θ\)角与x轴重合。
步骤1平移矩阵:
步骤2旋转矩阵:
注意:顺时针旋转取\(-θ\)。
于是,\(P(x,y)\xrightarrow{M_{xy,x'y'}} P'(x',y')\)的复合变换矩阵:
这样,A系统坐标通过平移、旋转,得到B系统坐标。
- 如何理解坐标轴的复合变换?
思考:上述复合变换中,明明\(x'y'\)坐标轴变换成了\(xy\)坐标轴,为什么\(xy\)系统转换成\(x'y'\)系统,而不是反过来?
用最简单的点\((0,0)\)来验证。假设\(x'y'\)系统下,原点坐标\((0,0)^B\),那么在\(xy\)系统下坐标为\((x_0,y_0)^A\),显然不符合复合变换;
而\(xy\)系统原点\((0,0)^A\),在\(x'y'\)系统下,坐标为\((-(x_0\cosθ+y_0\sinθ),x_0\sinθ-y_0\cosθ)^B\),符合复合变换。
求解\(O(0,0)^A\)在B系统下坐标示意图(注意加负号):
经复合变换,\(P(x_p,y_p)^A\to P'(x_p',y_p')^B\)。
变换过程:
令\(x=x_p, y=y_p, x'=x_p', y'=y_p'\),
那么,
这样,就将\(xy\)系统坐标转换到了\(x'y'\)系统。
构造旋转矩阵
有时,我们并不知道旋转角θ值,而知道新的坐标轴方向(\(x',y'\)轴)。此时,可先求θ大小(向量点积),然后得到旋转矩阵. 这里要介绍另一种方法:构造旋转矩阵,该变换将坐标轴\(x'y'\)旋转到坐标轴\(xy\),即将A系统坐标转换为B系统坐标。
正交矩阵概念
先复习几个概念:
- 正交向量
点积为0的两个或多个向量,称为正交向量。
假设向量\(V_1=(x_1,y_1), V_2=(x_2,y_2)\)是一组正交向量,则\(V_1\cdot V_2=x_1x_2+y_1y_2=0\)。
所谓正交向量,
- 正交矩阵
如果矩阵A,满足\(\bm{A}^T\bm{A}=E\),则称A为正交矩阵。
对于正交矩阵,其行向量组(或列向量组)为单位向量且两两正交。这组行(或列)向量构成一个空间的基,称为规范正交基。
下面证明:
设A是一个列向量矩阵且为正交矩阵,\(A=(\bm{α_1},\bm{α_2},...,\bm{α_n})\),其中\(\bm{α_i}(i=1,2,...,n)\)为列向量. 那么,
对于任意列向量\(\bm{α_i}, \bm{α_j}\),
1)如果\(i=j\),那么\(\bm{α_i}*\bm{α_j}=\bm{α_i}*\bm{α_i}=1 \implies |\bm{α_i}|=1\);
2)如果\(i≠j\),那么\(\bm{α_i}*\bm{α_j}=0\),则\(\bm{α_i}, \bm{α_j}\)互为正交向量。
当A由行向量组成时,该结论依然成立。
利用正交矩阵构造旋转矩阵
已知向量\(\bm{V}\parallel y'\)轴,那么,\(y'\)轴单位向量:
将\(\bm{v}\)顺时针旋转90°,得到沿\(x'\)轴单位向量:
上式证明:
如下图
∵\(\bm{v}, \bm{u}\)都是单位向量
∴\(|\bm{v}|=|\bm{u}|=1\)
假设\(\bm{v}\)在第二象限,\(\bm{v}\)与y轴夹角\(α\)
∴\(\bm{v} = (-\cos α, \sin α), \bm{u} = (\sin α,\cos α)\)
∵\(\bm{v} = (v_x,v_y)\)
∴\(\bm{u}=(v_y,-v_x)\),即得证.
显然,\(\bm{v}, \bm{u}\)正交,即\(\bm{v}\cdot \bm{u}=0\iff v⊥u\)。
由(2)知,旋转矩阵\(R(-θ)\)的行向量组是一组正交单位向量(即一组规范正交基):
i.e. 行向量组\((\cosθ, \sinθ, 0),(-\sinθ,\cosθ,0),(0,0,1)\)是一组规范正交基
问题:是否可以由一组规范正交基得到对应旋转矩阵?
答案是可以,可用规范正交基作为行向量(或列向量)组构造出旋转矩阵。不妨令,
其中,\(v_x=-\sinθ,v_y=\cosθ\)。利用式(6)中\(\bm{u},\bm{v}\)的关系,可得\(u_x=v_y=\cosθ, u_y=-v_x=\sinθ\),这符合旋转矩阵\(R(-θ)\)特性。
tips: 行向量组\(\bm{u}=(u_x,u_y),\bm{v}=(v_x,v_y)\),对应左乘坐标(列向量)
列向量组\(\bm{u}=\begin{pmatrix}u_x\\u_y\end{pmatrix},\bm{v}=\begin{pmatrix}v_x\\v_y\end{pmatrix}\),对应右乘坐标(行向量)
因此,旋转矩阵用行向量组,还是列向量组并无本质区别,可以看想变换的坐标用列向量形式,还是行向量形式.
接下来问题:\(θ\)在[0,2π)范围内是否有唯一解,即构造的旋转矩阵是否对应唯一的旋转?
答案是有唯一解。下面证明:
我们知道,正弦和余弦函数在0~2π范围内有2个解(如果有解),设2个解分别为\(θ_1,θ_2\in [0,2\pi)\)。
先根据\(\sinθ\)讨论\(θ\)取值范围,
1)当\(v_x<0\)时,\(\sinθ > 0\),那么\(θ_1 \in [0,{\pi\over 2}), θ_2\in [{\pi\over 2}, \pi)\);
2)当\(v_x\ge 0\)时,\(\sinθ \le 0\),那么\(θ_1\in [\pi,{3\over 2}\pi), θ_2\in[{3\over 2}\pi, 2\pi)\);
再根据\(\cosθ\)讨论\(θ\)取值范围,
1)当\(v_y>0\),则\(θ_1\in[0,{\pi\over 2}),θ_2\in[{3\over 2}\pi, 2\pi)\);
2)当\(v_y<0\),则\(θ_1\in [{\pi\over 2},\pi),θ_2\in [\pi,{3\over 2}\pi)\)。
再综合sin、cos取值范围。不难发现,当sin、cos取值确定时,\(θ\)范围只能是长度为π/2的4个区间之一:\([0,{\pi \over 2}), [{\pi \over 2},\pi), [\pi,{3\over 2}\pi), [{3\over 2}\pi,2\pi)\)。
而sin、cos在这些区间连续且单调,因此有唯一解。
举例,如果\(y'\)轴方向向量\(\bm{v}=(-1,0)\),那么\(x'\)轴方向向量\(\bm{u}\)应该在\(+y\)轴上(i.e. \(\bm{u}=(0,1)\)),且旋转矩阵为:
而根据(2),令\(θ={\pi\over 2}\),也能得到同样的旋转矩阵。
tips:这里只考虑旋转矩阵,没有考虑平移。如果要求平移矩阵,还需要知道\(x'y'\)系统原点在\(xy\)系统中的位置。
- 正交矩阵R的含义
对于正交矩阵R,有
R的每个行向量,刚好是B系统的坐标轴单位向量。
三维坐标系变换
利用正交矩阵构筑旋转矩阵
类似于二维坐标系变换,三维空间下,也能用一组规范正交基构造旋转矩阵。
问题描述:将\(xyz\)系统(A)下的坐标描述转换到\(x'y'z'\)坐标系统(B)。
步骤:
1)T: 先将\(x'y'z'\)原点平移到\(xyz\)原点;
2)R: 进行一系列旋转使得对应坐标轴重合。如果2个坐标系比例不同,需要先缩放使比例相同。
如下图:
其中,\(\bm{u},\bm{v},\bm{n}\)分别为\(X', Y', Z'\)轴单位轴向量。B系统的原点\(O'\)在A系统的\((x_0,y_0,z_0)^A\)位置,坐标轴由\(xyz\)坐标轴旋转得到。
首先,将\(O'\)平移至\(O(0,0,0)^A\),对应平移矩阵\(T(-x_0,-y_0,-z_0)\)。
三维平移、旋转、缩放操作,参见计算机图形:三维几何变换。
然后,用单位轴向量来构造坐标轴旋转矩阵,将单位轴向量\(\bm{u},\bm{v},\bm{n}\)分别转换到x、y、z轴上。构造方法类似于二维情形(参见(7))。
其中,B系统\(X',Y',Z'\)轴单位向量\(\bm{u}=(u_x,u_y,u_z)^A, \bm{v}=(v_x,v_y,v_z)^A, \bm{n}=(n_x,n_y,n_z)^A\)。
于是,复合变换矩阵:
A系统\(P\)点\(\to\)B系统\(P'\)点的变换:
变换矩阵的推导
上一节根据2D经验,构造出3D情形下坐标系变换对应的旋转矩阵,能否用数学方法推导出该变换呢?
答案是可以,不过要用到解析几何知识. (参见解析几何笔记:空间的正交变换和仿射变换).
笛卡尔坐标系下,平移、旋转、缩放都是空间的正交变换.
设正交变换\(ψ\),将直角标架\(Ⅰ[O;\bm{e_1},\bm{e_2},\bm{e_3}]\)变换为\(Ⅱ[O';\bm{e_1'},\bm{e_2'},\bm{e_3'}]\),其中\(O'(x_0,y_0,z_0)^Ⅰ\). 点的变换是直角标架的逆变换.
有\(Ⅰ[O;\bm{e_1},\bm{e_2},\bm{e_3}]\xrightarrow{ψ}Ⅱ[O';\bm{e_1'},\bm{e_2'},\bm{e_3'}]\)
∴
将复合变换\(ψ\)分解为旋转变换\(σ\)和平移变换\(τ\)
∵\(Ⅰ[O;\bm{e_1},\bm{e_2},\bm{e_3}]\xrightarrow{ψ=τσ}Ⅱ[O';\bm{e_1'},\bm{e_2'},\bm{e_3'}]\)
∴
∵平移不改变向量大小、方向
∴对于任一向量\(\bm{α}\),\(\overline{ψ}(\bm{α})=\overline{τ}\overline{σ}(\bm{α})=\overline{τ}(\overline{σ}(\bm{α}))=\overline{σ}(\bm{α})\)
∴
∵已知
对于\(\bm{e_1}\to \bm{e_1'}\),
同理,可由\(\bm{e_2}\to \bm{e_2'}, \bm{e_3}\to \bm{e_3'}\)分别得出:
∴\(A_2=\begin{pmatrix}a_{11}&a_{12}&a_{13}\\ a_{21}&a_{22}&a_{23}\\ a_{31}&a_{32}&a_{33}\end{pmatrix} =\begin{pmatrix}u_x&v_x&n_x\\ u_y&v_y&n_y\\ u_z&v_z&n_z\end{pmatrix}\)
于是,
写成齐次坐标形式:
已经求出直角标架的变换,而我们要求的是点的变换,如何求?
∵点的变换是直角标架的逆变换
∴点的变换
∵直角标架的旋转、平移变换是正交变换
∴复合变换也是正交变换
∴\(A\)是正交矩阵
∴\(A^{-1}=A^T=\begin{pmatrix}u_x&u_y&u_z\\
v_x&v_y&v_z\\
n_x&n_y&n_z\end{pmatrix}\)
注意:只有正交变换对应的过渡矩阵才是正交矩阵,齐次变换的系数矩阵不一定是正交矩阵.(过渡矩阵参见解析几何笔记:平面的正交变换)
∴
写成齐次坐标形式:
这就是点\(P(x,y,z)\)从\(A\)系统变换到B系统的变换矩阵:
小结
坐标系的转换与对象的转换是反的. i.g. \(x'y'\)轴转换到\(xy\)轴,但该变换对应:将\(xy\)系统的对象转换到\(x'y'\)系统。
本文作者:明明1109
本文链接:https://www.cnblogs.com/fortunely/p/17761095.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步