坐标转换(二):踩坑后总结的经验——左右手坐标系的平移、旋转变换

这次的文章,我们来看一看三维空间直角坐标系的平移和旋转变换,尽管这个内容早已见诸文献资料,但自己在看书籍以及期刊论文时,总是遇到让人百思不得其解的事情,就是不同的文献给出的同类型的旋转矩阵居然有不一样的,这让小D对文献中的公式产生了怀疑,也不知道哪个旋转矩阵才是对的。

于是,自己动手,丰衣足食,为了验证公式的正确性,小D把旋转矩阵推了个遍,包括文献中只给出了公式而没有过程的旋转矩阵的推导。

三维空间直角坐标系的平移变换

文章的开头,还是先讲讲坐标系的平移变换,平移变换的过程如下图所示:

假设点P是空间中的任意一点,其在XYZ坐标系中的坐标为(x, y, z)。现在点P不动,我们将XYZ坐标系做一个平移的操作,把XYZ平移到X´Y´Z´的位置,O´是平移后的坐标的原点,要注意的是,O´在XYZ中的坐标为(x0, y0, z0)。点P在XYZ坐标系中的坐标为(x, y, z),点P在平移后的坐标系X´Y´Z´中的坐标为(x´, y´, z´)。根据上面这个示意图,聪明的你一下就可以发现:

\begin{aligned}x&=x_0+x'\\y&=y_0+y'\\z&=z_0+z'\end{aligned}

通过上面的式子,我们可以求解出点P在X´Y´Z´坐标系中的坐标为:

\begin{aligned}x^{\prime}&=x-x_0\\y^{\prime}&=y-y_0\\z^{\prime}&=z-z_0\end{aligned}

把上面的式子转换成矩阵的形式就是:

\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\end{bmatrix}=\begin{bmatrix}x\\y\\z\end{bmatrix}-\begin{bmatrix}x_0\\y_0\\z_0\end{bmatrix}

这就是三维空间直角坐标系的平移变换了,左手坐标系和右手坐标系的平移变换公式是一样的。

三维空间直角坐标系的旋转变换

下面我们来看看三维空间直角坐标系的旋转变换,小D最开始在研究旋转变换的时候,只推导了右手坐标系的旋转变换。有一次看到了一篇文献,它用的是左手坐标系,但小D对文献中给出的公式的正确性感到怀疑,而我们要在代码中用到相关的坐标转换,这意味着我们需要知道左手坐标系旋转矩阵的正确表达式,所以小D又把左手坐标系的旋转矩阵推导了一遍。

公式推完之后,小D一直以为左手坐标系和右手坐标系的旋转矩阵是不一样的,因为之前在笔记本上推导了好多页,前前后后有很多个版本。左手坐标系是今年推导的,也没有和两年前推导的右手坐标系的公式去对比,所以刚开始没有发现二者是一样的。后来知乎网友提醒之后才发现,自己推导的左手坐标系和右手坐标系的旋转矩阵的确是一样的。

下面是左手坐标系和右手坐标系旋转矩阵的推导过程,推导的结果,也证明了左右手坐标系的旋转矩阵是一样的。

右手坐标系的旋转变换

右手坐标系的旋转过程有三个,分别是绕X,Y,Z轴旋转,右手坐标系在旋转时,通常规定以逆时针旋转方向为正方向。

①XYZ右手坐标系绕X轴逆时针旋转θ角

先来推导右手坐标系绕X轴旋转的旋转矩阵,这个过程可以用下面这个示意图表示:

假设P点为空间中任意一点,为了便于观察与推导,我们将P点放在YOZ平面内。P点在空间中保持不动,XYZ坐标系绕X轴逆时针旋转θ形成新的坐标系X´Y´Z´,P点在XYZ中的坐标为(x, y, z),P点在X´Y´Z´中的坐标为(x´, y´, z´),现在我们已知(x, y, z)、旋转角度θ和(x´, y´, z´),求旋转矩阵Rx。在推导的过程中,我们还要假设一个变量,就是点P相对于Y轴正方向逆时针的夹角为φ。

很明显,点P在XYZ坐标系中的Y,Z轴坐标可以表示为:

\begin{cases}y=OP\cos\varphi\\z=OP\sin\varphi\end{cases}

点P在X´Y´Z´坐标系中Y´,Z´轴坐标为:

\begin{cases}y'=OP\cos(\varphi-\theta)=OP\cos\varphi\cos\theta+OP\sin\varphi\sin\theta\\z'=OP\sin(\varphi-\theta)=OP\sin\varphi\cos\theta-OP\cos\varphi\sin\theta\end{cases}

把x,y带入x´,y´中,同时P点在XYZ中X轴坐标与其在X´Y´Z´坐标系中的X´轴坐标是相等的,所以有:

\begin{cases}x'=x\\y'=y\cos\theta+z\sin\theta\\z'=z\cos\theta-y\sin\theta\end{cases}

把这个表达式表示成矩阵相乘的形式为:

\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\end{bmatrix}=\begin{bmatrix}1&0&0\\0&\cos\theta&\sin\theta\\0&-\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=R_x(\theta)\begin{bmatrix}x\\y\\z\end{bmatrix}

上面的Rx就是XYZ右手坐标系绕X轴逆时针旋转θ角,空间中的点从XYZ坐标系变换到X´Y´Z´坐标系的旋转矩阵,Rx(θ)的表达式为:

R_x(\theta)=\begin{bmatrix}1&0&0\\0&\cos\theta&\sin\theta\\0&-\sin\theta&\cos\theta\end{bmatrix}

②XYZ右手坐标系绕Y轴逆时针旋转θ角

有了前面的推导过程,XYZ右手坐标系绕Y轴逆时针旋转θ角的旋转矩阵的推导就一葫芦画瓢了。旋转过程如下图所示:

点P在XYZ右手坐标系中的X,Z轴坐标为:

\begin{cases}x=OP\sin\varphi\\z=OP\cos\varphi\end{cases}

点P在X´Y´Z´坐标系中的X,Z轴坐标为:

\begin{cases}x^{\prime}=OP\sin(\varphi-\theta)=OP\sin\varphi\cos\theta-OP\cos\varphi\sin\theta\\z^{\prime}=OP\cos(\varphi-\theta)=OP\cos\varphi\cos\theta+OP\sin\varphi\sin\theta&\end{cases}

把x,z带入x´,z´中,同时P点在XYZ中的Y轴坐标与X´Y´Z´坐标系中的Y´轴坐标是相等的,所以有:

\begin{cases}x'=x\cos\theta-z\sin\theta\\y'=y\\z'=z\cos\theta+x\sin\theta\end{cases}

写成矩阵相乘的形式:

\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\end{bmatrix}=\begin{bmatrix}\cos\theta&0&-\sin\theta\\0&1&0\\\sin\theta&0&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=R_y(\theta)\begin{bmatrix}x\\y\\z\end{bmatrix}

所以,XYZ右手坐标系绕Y轴逆时针旋转θ角的旋转矩阵Ry(θ)为:

R_y(\theta)=\begin{bmatrix}\cos\theta&0&-\sin\theta\\0&1&0\\\sin\theta&0&\cos\theta\end{bmatrix}

XYZ右手坐标系绕Z轴逆时针旋转θ角

XYZ右手坐标系绕Z轴逆时针旋转θ的过程如下图所示:

点P在XYZ右手坐标系中的X,Y轴坐标为:

\begin{cases}x=OP\cos\varphi\\y=OP\sin\varphi&\end{cases}

点P在X´Y´Z´坐标系中的x,y坐标为:

\begin{cases}x'=OP\cos(\varphi-\theta)=OP\cos\varphi\cos\theta+OP\sin\varphi\sin\theta\\y'=OP\sin(\varphi-\theta)=OP\sin\varphi\cos\theta-OP\cos\varphi\sin\theta&\end{cases}

把x,y带入x´,y´中,同时P点在XYZ中的Z轴坐标与其在X´Y´Z´坐标系中的Z´轴坐标是相等的,所以有:

\begin{cases}x'=x\cos\theta+y\sin\theta\\y'=y\cos\theta-x\sin\theta\\z'=z\end{cases}

写成矩阵相乘的形式:

\begin{cases}x'=x\cos\theta+y\sin\theta\\y'=y\cos\theta-x\sin\theta\\z'=z\end{cases}

所以,XYZ右手坐标系绕Z轴逆时针旋转θ角的旋转矩阵Rz(θ)为:

R_z(\theta)=\begin{bmatrix}\cos\theta&\sin\theta&0\\-\sin\theta&\cos\theta&0\\0&0&1\end{bmatrix}

左手坐标系的旋转变换

左手坐标系的旋转过程也是三个,分别是绕X,Y,Z轴旋转,左手坐标系在旋转时,通常规定以顺时针旋转方向为正方向。

①XYZ左手坐标系绕X轴顺时针旋转θ角

XYZ左手坐标系绕X轴顺时针旋转θ角的过程示意图如下所示:

上图中,点P为空间中任意一点,点P保持不动,XYZ左手坐标系绕X轴顺时针旋转θ角形成新的坐标系X´Y´Z´。已知点P在XYZ坐标系中的坐标为(x,y,z),点P在X´Y´Z´中的坐标为(x´,y´,z´),我们要求的是XYZ坐标系变换到X´Y´Z´坐标系这个过程中的旋转矩阵。

从图中可以看出,点P在XYZ坐标系中的Y,Z轴坐标为:

\begin{cases}y=OP\sin\varphi\\z=OP\cos\varphi\end{cases}

点P在X´Y´Z´坐标系中的Y,Z轴坐标为:

\begin{cases}y'=OP\sin(\varphi+\theta)=OP\sin\varphi\cos\theta+OP\cos\varphi\sin\theta\\z'=OP\cos(\varphi+\theta)=OP\cos\varphi\cos\theta-OP\sin\varphi\sin\theta\end{cases}

把y,z带入y´,z´中,同时P点在XYZ中的X轴坐标与其在X´Y´Z´中的X´轴坐标是相等的,所以有:

\begin{cases}x'=x\\y'=y\cos\theta+z\sin\theta\\z'=z\cos\theta-y\sin\theta\end{cases}

写成矩阵相乘的形式:

\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\end{bmatrix}=\begin{bmatrix}1&0&0\\0&\cos\theta&\sin\theta\\0&-\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=R_x(\theta)\begin{bmatrix}x\\y\\z\end{bmatrix}

所以,XYZ左手坐标系绕X轴顺时针旋转θ角的旋转矩阵为:

R_x(\theta)=\begin{bmatrix}1&0&0\\0&\cos\theta&\sin\theta\\0&-\sin\theta&\cos\theta\end{bmatrix}

XYZ左手坐标系绕Y轴顺时针旋转θ角

XYZ左手坐标系绕Y轴顺时针旋转θ角形成X´Y´Z´坐标系,其过程示意图如下:

点P在XYZ坐标系中的X,Z轴坐标为:

\begin{cases}x=OP\cos\varphi\\z=OP\sin\varphi\end{cases}

点P在X´Y´Z´坐标系中的X,Z轴坐标为:

\begin{cases}x'=OP\cos(\varphi+\theta)=OP\cos\varphi\cos\theta-OP\sin\varphi\sin\theta\\z'=OP\sin(\varphi+\theta)=OP\sin\varphi\cos\theta+OP\cos\varphi\sin\theta\end{cases}

把x,z带入x´,z´中,同时P点在XYZ中的Y轴坐标与其在X´Y´Z´坐标系中的Y´轴坐标是相等的,所以有:

\begin{cases}x'=x\cos\theta-z\sin\theta\\y'=y\\z'=z\cos\theta+x\sin\theta\end{cases}

以矩阵形式表示为:

\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\end{bmatrix}=\begin{bmatrix}\cos\theta&0&-\sin\theta\\0&1&0\\\sin\theta&0&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=R_y(\theta)\begin{bmatrix}x\\y\\z\end{bmatrix}

所以,XYZ左手坐标系绕Y轴顺时针旋转θ角的旋转矩阵Ry(θ)为:

R_y(\theta)=\begin{bmatrix}\cos\theta&0&-\sin\theta\\0&1&0\\\sin\theta&0&\cos\theta\end{bmatrix}

③XYZ左手坐标系绕Z轴顺时针旋转θ角

XYZ左手坐标系绕Z轴顺时针旋转θ角形成X´Y´Z´坐标系的过程示意图如下所示:

点P在XYZ坐标系中的X,Y轴坐标为:

\begin{cases}x=OP\sin\varphi\\y=OP\cos\varphi\end{cases}

点P在X´Y´Z´坐标系中的X,Y轴坐标为:

\begin{cases}x'=OP\cos(\varphi-\theta)=OP\cos\varphi\cos\theta+OP\sin\varphi\sin\theta\\y'=OP\sin(\varphi-\theta)=OP\sin\varphi\cos\theta-OP\cos\varphi\sin\theta\end{cases}

把x,y带入x´,y´中,同时P点在XYZ中的Z轴坐标与其在X´Y´Z´坐标系中的Z´轴坐标是相等的,所以有:

\begin{cases}x'=x\cos\theta+y\sin\theta\\y'=y\cos\theta-x\sin\theta\\z'=z\end{cases}

将上式表示成矩阵的形式为:

\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\end{bmatrix}=\begin{bmatrix}\cos\theta&&\sin\theta&&0\\-\sin\theta&&\cos\theta&&0\\0&&0&&1\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=R_z(\theta)\begin{bmatrix}x\\y\\z\end{bmatrix}

所以,XYZ左手坐标系绕Z轴顺时针旋转θ角的旋转矩阵Rz(θ)为:

R_z(\theta)=\begin{bmatrix}\cos\theta&&\sin\theta&&0\\-\sin\theta&&\cos\theta&&0\\0&&0&&1\end{bmatrix}

左手坐标系的旋转矩阵到这里就推导完了。

旋转矩阵的运用

实际中,当我们要推导两个不同的坐标系,比如地心地固坐标系和ENU、ENU坐标系和机体坐标系等坐标系、机体坐标系和天线阵面坐标系、ENU坐标系和天线阵面坐标系之间的变换关系时,就要用到上面的旋转矩阵。一般的方法是,根据实际的旋转过程,按旋转的先后顺序计算旋转矩阵。

比如对于右手坐标系,如果有一个过程是先绕Y轴逆时针旋转α,再绕X轴顺时针旋转β,最后绕Z轴逆时针旋转γ,那么最终的旋转矩阵的表达就是:

R=R_z(\gamma)R_x(-\beta)R_y(\alpha)

通义千问对旋转矩阵性质的解释是这样的:

在应用旋转矩阵的过程中,小D还总结了一个经验:不管是左手坐标系还是右手坐标系,假如绕X轴逆时针旋转θ角,相当于绕X轴顺时针旋转2π-θ角,同时也相当于绕X轴顺时针旋转-θ角。

另外,旋转矩阵的逆和它的转置是相等的,所以如果你要求旋转矩阵的逆矩阵,直接对它求转置就可以了。

旋转矩阵的验证

推导了这么多公式,那推导结果是否正确呢?我们可以从《雷达数据处理及应用》中找到相关内容:

从书中的截图中可以验证,自己推导的平移变换以及右手坐标系的旋转矩阵是没有问题的。但是左手坐标系的推导,小D至今没有找到相关文献,但小D相信肯定是有的。

然后小D向gpt求证,gpt给出的答案是这样的:

图片

很显然,gpt给出的右手坐标系的旋转矩阵不是小D上面推导的结果,也跟书中的结果不一样。于是小D又去问了gpt4,gpt4的回答是这样的:

图片

gpt4的回答和gpt3.5的回答如出一辙,当时小D心想,gpt脑子估计又瓦特了。直到最近,小D看到了一本英文书籍Geometric Transformations for 3D Modeling_Michael Mortenson,小D才明白,原来gpt是没有正确理解问题,它给出的是坐标系中的点转动,坐标轴不动的情况。这本英文书籍中坐标转换相关的内容是这样的:

图片

图片

图片

图片

图片

这个时候,小D才明白为什么gpt会给出那样的答案,因为旋转分为两种:

①点不动,坐标轴旋转,就是小D推导的公式

②坐标轴不动,点旋转,就是gpt第一次回答的公式

以另一种方式问它,它就回答对了“点不动,坐标轴旋转”的旋转矩阵正确的公式:

图片

图片

到这里,就验证了小D推导的坐标转换的所有公式了。对比左手坐标系和右手坐标系的旋转矩阵可以发现,二者是一样的,需要注意的是,左手坐标系的顺时针旋转为正,右手坐标系逆时针旋转为正。

书籍PDF下载

①《雷达数据处理及应用》的PDF下载地址:

https://pan.baidu.com/s/1eG7jjAmWHmeje-PAMMCvCw 
提取码:hmxn 

Geometric Transformations for 3D Modeling的PDF下载地址:

https://pan.baidu.com/s/12K1piKvgMWvh0FlmXFfS_g?pwd=rnwd 
提取码:rnwd 

参考文献

[1] 何友, 修建娟等, 雷达数据处理及应用[M]. 北京, 电子工业出版社, 2013, 87-89

[2] Michael E. Mortenson, Geometric Transformations for 3D Modeling[M]. New York, Industrial Press Inc, 2009, 161-168

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值