向量旋转公式(转)

在二维坐标系中,一个位置向量的旋转公式可以由三角函数的几何意义推出.

比如上图所示是位置向量R逆时针旋转角度B前后的情况.
      在左图中,我们有关系:
  x0 = |R| * cosA       =>          cosA = x0 / |R|
  y0 = |R| * sinA        =>          sinA = y0 / |R|
   在右图中,我们有关系:
  x1 = |R| * cos(A+B)
  y1 = |R| * sin(A+B)
  其中(x1,y1)就是(x0,y0)旋转角B后得到的点,也就是位置向量R最后指向的点.我们展开cos(A+B)和sin(A+B),得到:
  x1 = |R| * (cosAcosB - sinAsinB)
  y1 = |R| * (sinAcosB + cosAsinB)
  现在把  cosA = x0 / |R| 和 sinA = y0 / |R|  代入上面的式子,得到:
  x1 = |R| * (x0 * cosB / |R| - y0 * sinB / |R|) =>  x1 = x0 * cosB - y0 * sinB
  y1 = |R| * (y0 * cosB / |R| + x0 * sinB / |R|) =>  y1 = x0 * sinB + y0 * cosB
  这样我们就得到了二维坐标下向量围绕圆点的逆时针旋转公式.顺时针旋转就把角度变为负:
  x1 = x0 * cos(-B) - y0 * sin(-B) =>  x1 = x0 * cosB + y0 * sinB
  y1 = x0 * sin(-B) + y0 * cos(-B)=>  y1 = -x0 * sinB + y0 * cosB
  现在我要把这个旋转公式写成矩阵的形式,有一个概念我简单提一下,平面或空间里的每个线性变换(这里就是旋转变换)都对应一个矩阵,叫做变换矩阵.对一个点实施线性变换就是通过乘上该线性变换的矩阵完成的.好了,打住,不然就跑题了.
所以二维旋转变换矩阵就是:
                                           [cosA  sinA]          [cosA -sinA]
                                           [-sinA cosA] 或者  [sinA cosA]

  我们对向量进行旋转变换可以通过矩阵完成,比如我要向量(x,y)绕原点逆时针旋转角度A:
                      [x,y] x  [cosA  sinA]     = [x*cosA-y*sinA  x*sinA+y*cosA]

[-sinA cosA]

旋转后的向量为:[x*cosA-y*sinA  x*sinA+y*cosA]

原文:http://www.zybang.com/question/143ceaa20d3942f3c6dbe9415dd81d0a.html

时间: 2024-10-09 23:15:52

向量旋转公式(转)的相关文章

一种另类的计算向量旋转公式(复杂慎用)

一般来说,我们解决向量旋转问题一般要么是用旋转矩阵,要么是用四元数.但很早以前我从网上找了一种比较另类的函数,当时也没有深究.最近又把这个函数拿出看看,仔细一琢磨,发现真的很另类.这里分享一下,就当是扩展一下思维.我给这种方法起个名字——向量累加法. 这个方法的公式是这样的,P'=P·cosθ + (A×P)sinθ +A(A·P)(1 - cosθ).这种公式任谁第一眼看到都会摸不着头脑,我们首先来将公式换一个写法: 图1 这个公式中|A|=1.为什么这样变换呢?因为P'正好是三个向量相加,后

向量旋转公式

不改变大小旋转. 逆时针: p: (x,y) --------> p': ( x*cos(d)-y*sin(d) , x*sin(d)+y*cos(d) ) 顺时针: p: (x,y) --------> p': ( x*cos(-d)-y*sin(-d) , x*sin(-d)+y*cos(-d) ) d 是角度.

HDU 1700 Points on Cycle (几何 向量旋转)

http://acm.hdu.edu.cn/showproblem.php?pid=1700 题目大意: 二维平面,一个圆的圆心在原点上.给定圆上的一点A,求另外两点B,C,B.C在圆上,并且三角形ABC的周长是最长的. 解题思路: 我记得小学的时候给出个一个定理,在园里面正多边形的的周长是最长的,这个定理我不会证明. 所以这里是三角形,当三角形为正三角形的时候,周长是最长的. 因为圆心在原点,所以我就向量(x,y)绕原点逆时针旋转120度和顺时针旋转120度.给定的点A可以看成(x,y)向量.

sdut 2603 Rescue The Princess(算是解析几何吧)(山东省第四届ACM省赛A题)

题目地址:sdut 2603 Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a beast caught a beautiful princess and the princess was put in prison. To rescue the princess, a prince who wanted to marry the princess

Points on Cycle

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description There is a cycle with its center on the origin. Now give you a point on the cycle, you are to find out the other two points on it, to maximize the sum of the dis

POJ2991

题目链接:https://vjudge.net/problem/POJ-2991 知识准备: 1.向量旋转公式:向量(x,y)逆时针旋转角度A,则旋转后的向量为(x*cos A-y*sin A, x*sin A+y*cos A). 详见:https://www.zybang.com/question/143ceaa20d3942f3c6dbe9415dd81d0a.html 2.PI可用这一行代码取得: const double PI=acos(-1.0); 解题思路:思路来源于:http://

线段树专题(二)

马不停蹄,马不停蹄,才写完上一部分,没有时间休息,又要开始下一部分了.这部分主要是线段树区间更新的难题和区间合并的一些题目,最后最困难的扫描线算法应该会出现在第三部分. 第一题 ZOJ 1610 分析:首先声明一点这道题我没有AC,当然不是因为我不会,而是因为坑人的ZOJ又爆炸了,交不了代码.所以万一我的代码出了问题,你们不准打我,思路是肯定没有问题的. 其实这道题不算难题啦,只是因为我的失误,错把它分到第二部分了,唉,就当热身. 给你N个气球,在区间端上刷颜色,最后让你求每个颜色的段数.那么还

Board Wrapping(计算几何求凸包加向量的旋转)

UVA - 10652 Board Wrapping Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The small sa

c++ 知道旋转前后矩阵向量值 求旋转矩阵c++/c#代码 知道两个向量求他们的旋转矩阵

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12115244.html 知道旋转前后矩阵向量值 如何去求旋转矩阵R 的c++/c#代码??? 因为需要用到矩阵处理库所以需要先配置 一.Eigen库的配置(VS2017) Eigen库下载: http://eigen.tuxfamily.org/index.php?title=Main_Page 下载文件并解压: 然后在自己的VS工程属性中的这个附加包含进去 注意看清楚了 是D:\Depen