二维旋转公式

本文深入解析二维旋转公式及二维坐标系旋转变换,详细阐述了如何通过数学公式实现坐标点的逆时针旋转,并提供了旋转矩阵的计算方法,同时对比了二维旋转与坐标旋转的异同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二维旋转公式

ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。

1. 二维旋转公式(算法)

而(此文只针对二维)旋转则是表示某一坐标点(x1,y1)(x_1, y_1)(x1,y1)某一坐标系下绕原点逆时针(正向)旋转角度θ\thetaθ后得到新的坐标点(x2,y2)(x_2, y_2)(x2,y2)
在这里插入图片描述

推导:
假定v=(x,y)v=(x, y)v=(x,y),v′=(x′,y′)v'=(x',y')v=(x,y),如上图有x=rcos(ϕ),y=rsin(ϕ),x′=rcos(ϕ+θ),y′=rsin(ϕ+θ)x=rcos(\phi),y=rsin(\phi),x'=rcos(\phi+\theta),y'=rsin(\phi+\theta)x=rcos(ϕ),y=rsin(ϕ),x=rcos(ϕ+θ),y=rsin(ϕ+θ)(注意,上图有几处错误,坐标轴边上的cos/sin(θ)cos/sin(\theta)cos/sin(θ)应改为cos/sin(ϕ+θcos/sin(\phi+\thetacos/sin(ϕ+θ)。展开x′,y′x',y'x,y可得:
x′=rcos(ϕ)cos(θ)−rsin(ϕ)sin(θ)=xcos(θ)−ysin(θ)x'=rcos(\phi)cos(\theta)-rsin(\phi)sin(\theta)=xcos(\theta)-ysin(\theta)x=rcos(ϕ)cos(θ)rsin(ϕ)sin(θ)=xcos(θ)ysin(θ)
y′=rsin(ϕ)cos(θ)+rcos(ϕ)sin(θ)=xsin(θ)+ycos(θ)y'=rsin(\phi)cos(\theta)+rcos(\phi)sin(\theta)=xsin(\theta)+ycos(\theta)y=rsin(ϕ)cos(θ)+rcos(ϕ)sin(θ)=xsin(θ)+ycos(θ)

矩阵形式为:[x′y′]=[cos(θ)−sin(θ)sin(θ)cos(θ)][xy]\left[\begin{matrix}x' \\ y'\end{matrix}\right]=\left[\begin{matrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\end{matrix}\right]\left[\begin{matrix}x \\ y\end{matrix}\right][xy]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]

则二维旋转矩阵为:A=[cos(θ)−sin(θ)sin(θ)cos(θ)](1)A=\left[\begin{matrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\end{matrix}\right] \tag{1}A=[cos(θ)sin(θ)sin(θ)cos(θ)](1)

void Rotate2(double x1, double y1, double alpha, double& x2, double& y2)
{
	x2 = x1 * cos(alpha) - y1 * sin(alpha);
	y2 = x1 * sin(alpha) + y1 * cos(alpha);
}

2. 二维坐标系旋转变换

假设有一坐标系XOYXOYXOY,经过逆时针(正向)旋转角度θ\thetaθ后,得到新的坐标系X′O‘Y′X'O‘Y'XOY。得到原来坐标系中的坐标(x,y)(x,y)(x,y)在新坐标系下的坐标值被称为坐标系转换。
在这里插入图片描述

x′=xcos(θ)+ysin(θ)=xcos(−θ)−ysin(−θ)x'=xcos(\theta)+ysin(\theta)=xcos(-\theta)-ysin(-\theta)x=xcos(θ)+ysin(θ)=xcos(θ)ysin(θ)
y′=−xsin(θ)+ycos(θ)=xsin(−θ)+ycos(−θ)y'=-xsin(\theta)+ycos(\theta)=xsin(-\theta)+ycos(-\theta)y=xsin(θ)+ycos(θ)=xsin(θ)+ycos(θ)

所以二维坐标旋转变换矩阵为:B=[cos(θ)sin(θ)−sin(θ)cos(θ)]=[cos(−θ)−sin(−θ)sin(−θ)cos(−θ)](2)B=\left[\begin{matrix} cos(\theta) & sin(\theta) \\ -sin(\theta) & cos(\theta)\end{matrix}\right]=\left[\begin{matrix} cos(-\theta) & -sin(-\theta) \\ sin(-\theta) & cos(-\theta)\end{matrix}\right] \tag{2}B=[cos(θ)sin(θ)sin(θ)cos(θ)]=[cos(θ)sin(θ)sin(θ)cos(θ)](2)

结论

对比公式(1)与(2),可发现,二维旋转与二维坐标旋转形式一致,只是当旋转都为正向(逆时针)时,角度相差一个负号。也即,在同一坐标轴下将某一点(x,y)(x,y)(x,y)沿原点正向(逆时针)旋转角度θ\thetaθ后得到的新坐标点(x′,y′)(x',y')(x,y),等价于将点(x,y)(x,y)(x,y)所在的坐标系XOYXOYXOY逆向(顺时针)旋转角度θ\thetaθ后,在新的坐标系X′O′Y′X'O'Y'XOY下,(x,y)(x,y)(x,y)对应的新坐标点(x′,y′)(x',y')(x,y)。拿起纸笔,多摆弄上面两张解释图,就清楚了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windSeS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值