推导坐标旋转公式

1围绕原点的旋转

在《Flash actionScript 3.0 动画教程》一书中有一个旋转公式:

x1=cos(angle)*x-sin(angle)*y;

y1=cos(angle)*y+sin(angle)*x;

其中x,y表示物体相对于旋转点旋转angle的角度之前的坐标,x1,y1表示物体旋转angle后相对于旋转点的坐标

 

从数学上来说,此公式可以用来计算某个点绕另外一点旋转一定角度后的坐标,例如:A(x,y)绕B(a,b)旋转β度后的位置为C(c,d),则x,y,a,b,β,c,d有如下关系式:



1。设A点旋转前的角度为δ,则旋转(逆时针)到C点后角度为δ+β

2。求A,B两点的距离:dist1=|AB|=y/sin(δ)=x/cos(δ)

3。求C,B两点的距离:dist2=|CB|=d/sin(δ+β)=c/cos(δ+β)

4。显然dist1=dist2,设dist1=r所以:

  r=x/cos(δ)=y/sin(δ)=d/sin(δ+β)=c/cos(δ+β)

5。由三角函数两角和差公式知:

  sin(δ+β)=sin(δ)cos(β)+cos(δ)sin(β)

  cos(δ+β)=cos(δ)cos(β)-sin(δ)sin(β)

  所以得出:

  c=r*cos(δ+β)=r*cos(δ)cos(β)-r*sin(δ)sin(β)=xcos(β)-ysin(β)

  d=r*sin(δ+β)=r*sin(δ)cos(β)+r*cos(δ)sin(β)=ycos(β)+xsin(β)

即旋转后的坐标c,d只与旋转前的坐标x,y及旋转的角度β有关:


 

从图中可以很容易理解出A点旋转后的C点总是在圆周上运动,圆周的半径为|AB|,利用这点就可以使物体绕圆周运动,即旋转物体。

以上转自http://www.cnblogs.com/ywxgod/archive/2010/08/06/1793609.html


2.座标系的旋转

在原坐标系xoy中,  绕原点沿逆时针方向旋转theta度, 变成座标系 sot。

设有某点p,在原坐标系中的坐标为 (x, y), 旋转后的新坐标为(s, t)。


oa = y sin(theta)   (2.1)

as = x cos(theta)   (2.2)

综合(2.1),(2.2) 2式

s =  os =oa + as = x cos(theta) + y sin(theta)

t =  ot =ay – ab = y cos(theta) – x sin(theta)

用行列式表达如下


<think>好的,我现在要解决用户的问题:二维平面中围绕任意点旋转公式推导过程。用户提到可能是为了学习或应用几何变换,所以需要详细但清晰的步骤。 首先,我得回忆一下几何变换的基础知识。二维旋转通常有两种情况:绕原点和绕任意点。用户问的是后者,所以需要从基础开始,逐步推导。 用户给出的引用[1]中提到,绕任意点旋转可以通过平移、旋转、再平移的组合来实现。这应该是关键步骤。引用[2]也提到坐标变换的思路,可能可以用坐标系转换的方法来推导。我需要结合这两种方法,确保推导过程正确。 第一步,先确定问题:点P绕点O(a,b)旋转θ角度后的坐标P'。这里的O不是原点,所以直接应用绕原点旋转公式不行,必须转换坐标系。 接下来,分解步骤。根据引用[1],正确的方法应该是将点P平移到以O为原点的坐标系,旋转后再平移回去。这需要三个步骤:平移、旋转、逆平移。 具体来说: 1. 平移:将点P(x,y)平移向量(-a,-b),使得点O移到原点。得到新坐标P1(x-a, y-b)。 2. 旋转:将P1绕原点旋转θ,应用绕原点旋转矩阵。这一步的公式是: x' = (x-a)cosθ - (y-b)sinθ y' = (x-a)sinθ + (y-b)cosθ 3. 逆平移:将旋转后的坐标再平移向量(a,b),得到最终的P'(x'', y'')。 所以,综合起来,最终的坐标变换公式应该是: x'' = (x-a)cosθ - (y-b)sinθ + a y'' = (x-a)sinθ + (y-b)cosθ + b 接下来需要验证这个推导是否正确。可以通过一个简单的例子,比如绕点(1,0)旋转90度,看看点(2,0)旋转后是否变为(1,1)。带入公式: x'' = (2-1)cos90 - (0-0)sin90 +1 = 1*0 - 0*1 +1=1 y'' = (2-1)sin90 + (0-0)cos90 +0=1*1 +0*0 +0=1 正确,结果是(1,1),符合预期。所以推导是正确的。 然后,需要考虑用齐次坐标和变换矩阵来表示这个过程,这样更系统化。齐次坐标下,平移和旋转可以用矩阵相乘组合起来。每个步骤对应的矩阵是: 1. 平移矩阵T1,将点O移到原点: $$ T_1 = \begin{pmatrix} 1 & 0 & -a \\ 0 & 1 & -b \\ 0 & 0 & 1 \end{pmatrix} $$ 2. 旋转矩阵R(θ): $$ R(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} $$ 3. 平移矩阵T2,移回原位置: $$ T_2 = \begin{pmatrix} 1 & 0 & a \\ 0 & 1 & b \\ 0 & 0 & 1 \end{pmatrix} $$ 组合后的变换矩阵是T2 * R(θ) * T1。矩阵相乘后的结果是一个3x3矩阵,应用这个矩阵到点P的齐次坐标,就能得到P'的坐标。展开后的结果应该和之前的代数推导一致。 此外,引用[3]和[4]提到的仿射变换和OpenCV的实现可能相关,用户可能在实际编程中应用这个公式,例如使用getPerspectiveTransform或仿射变换函数。这时候需要注意,虽然用户的问题是关于二维旋转,但实际应用中可能需要使用相应的库函数,比如OpenCV中的仿射变换函数,通过指定旋转中心和角度来实现。 用户的问题还可能涉及到为什么需要分解为三个步骤。这时候可以解释,因为旋转矩阵本身只能处理绕原点旋转,所以必须通过平移来调整坐标系,使得绕任意点的问题转化为绕原点的问题。这种分解法在图形学中很常见,确保了变换的组合性。 最后,要确保公式的LaTeX格式正确,用户示例中要求行内公式用$...$,独立公式用$$...$$并单独成段。检查每个数学表达式是否符合要求,例如变换矩阵的表示是否正确,是否有遗漏的符号等。 总结一下,推导过程需要分步骤解释,结合代数方法和矩阵变换,同时验证正确性,并关联实际应用,如编程中的实现方法。这样用户不仅能理解公式推导,还能知道如何应用它。</think>### 二维平面绕任意点旋转公式推导 #### 1. 问题定义 设点 $P(x,y)$ 绕任意点 $O(a,b)$ 逆时针旋转 $\theta$ 角度后得到新坐标 $P'(x', y')$,需推导其坐标变换公式。 #### 2. 核心思路(分步变换法) 通过平移坐标系将问题转化为绕原点旋转,分三步操作: 1. **平移**:将点 $O(a,b)$ 平移到原点 2. **旋转**:绕原点旋转 $\theta$ 角度 3. **逆平移**:将坐标系平移回原位置 #### 3. 推导过程 **步骤 1:平移至原点** 将点 $P$ 平移 $(-a,-b)$: $$ \begin{cases} x_1 = x - a \\ y_1 = y - b \end{cases} $$ **步骤 2:绕原点旋转** 应用旋转矩阵: $$ \begin{pmatrix} x_2 \\ y_2 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x_1 \\ y_1 \end{pmatrix} $$ 展开得: $$ \begin{cases} x_2 = x_1\cos\theta - y_1\sin\theta \\ y_2 = x_1\sin\theta + y_1\cos\theta \end{cases} $$ **步骤 3:逆平移恢复坐标系** 再平移 $(a,b)$: $$ \begin{cases} x' = x_2 + a \\ y' = y_2 + b \end{cases} $$ **最终公式**: $$ \boxed{ \begin{cases} x' = (x-a)\cos\theta - (y-b)\sin\theta + a \\ y' = (x-a)\sin\theta + (y-b)\cos\theta + b \end{cases} } $$ #### 4. 矩阵形式(齐次坐标) 用齐次坐标表示为复合变换矩阵: $$ \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \underbrace{ \begin{pmatrix} 1 & 0 & a \\ 0 & 1 & b \\ 0 & 0 & 1 \end{pmatrix} }_{T_2} \underbrace{ \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} }_{R(\theta)} \underbrace{ \begin{pmatrix} 1 & 0 & -a \\ 0 & 1 & -b \\ 0 & 0 & 1 \end{pmatrix} }_{T_1} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} $$ #### 5. 几何验证(以绕点(1,0)旋转90°为例) - 原坐标 $P(2,0)$,旋转后应为 $P'(1,1)$ - 代入公式: $$ x' = (2-1)\cos90° - (0-0)\sin90° + 1 = 1×0 + 1 = 1 \\ y' = (2-1)\sin90° + (0-0)\cos90° + 0 = 1×1 + 0 = 1 $$ #### 6. 应用场景 - **计算机图形学**:OpenCV中的仿射变换函数 `warpAffine()` 即基于此原理[^4] - **游戏开发**:角色绕指定点旋转 - **机器人运动学**:机械臂末端绕工具中心旋转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值