在三维空间里一个点绕X轴 Y轴 Z轴旋转一定弧度后新的点的坐标是容易计算的,问题是如果它所绕的旋转轴是一个任意矢量(x,y,z)的话,怎么知道旋转angle弧度后新的点的坐标呢?

在OPENGL里有一个函数glRotatef(angle,x,y,z)可以实现此功能,它的实现是左乘一个矩阵

这里假定坐标轴是右手系的(opengl的坐标轴是右手系的,和大学数学教课书里一样),其中 c = cos(angle),s = sin(angle),angle的正负是这样规定的,即在右手系法则里,把大拇指指向矢量方向,其余四指沿逆时针方向自然环绕的角度为正的角度,矢量(x,y,z)必须是已经单位化的且经过原点,这样就可算出:

new_x = (x2(1-c)+c) * old_x + (xy(1-c)-zs) * old_y + (xz(1-c)+ys) * old_z

new_y = (yx(1-c)+zs) * old_x + (y2(1-c)+c) * old_y + (yz(1-c)-xs) * old_z

new_z = (xz(1-c)-ys) * old_x + (yz(1-c)+xs) * old_y + (z2(1-c)+c) * old_z

(old_x,old_y,old_z)是原来的点的坐标,(new_x,new_y,new_z)是旋转后的新的点的坐标

这个公式是怎么推导出来的这里不细述(可以参考罗德里格旋转公式的推导),一种方法是通过左乘旋转矩阵M把向量变换为坐标系的一个轴比如z,然后再绕z轴旋转该angle相当于左乘一个矩阵,最后再把向量左乘M的逆矩阵变回去,这一系列的矩阵相乘的结果就是上面的这个矩阵。这个问题困惑我好久了,比如一个矢量绕一个矢量旋转一定角度后得到新的矢量是什么,用它来计算就可以,可以分别计算矢量的起点和终点旋转后得到的新的点的坐标,也就得到了新的矢量。

Rodrigues' rotation formula可以帮你更容易记住以上结论,揭示了旋转矩阵R与旋转角度θ,旋转轴n之间的关系:

R=cosθ I + (1-cosθ) n n' + sinθ n^

其中I是单位矩阵,n=[x y z]'是单位向量,n^=[[0 z -y]' [-z 0 x]' [y -x 0]']是一个对角线元素都为零的反对称矩阵(也叫斜对称矩阵)。

旋转矩阵的另一种更常见的写法:R=I + sinθ n^ + (1-cosθ) n^ n^

这个与上面的写法是等价的,不信可以展开对比一下。但这个要好记一点吧。

  • 另外使用四元数(Quaternion)来解决该问题,也是一个方便的途径,四元数是Hamilton找到的一种对复数的扩展。已知旋转轴(x,y,z)是单位向量,θ是旋转的角度,(X,Y,Z)是P点的坐标,一个用来执行旋转的四元数q=((x,y,z)sin(θ/2), cos(θ/2)),同时,记q的逆为r,则r=((-x,-y,-z)sin(θ/2), cos(θ/2)),待旋转的点P用四元数表示p=((X,Y,Z),0),旋转后的点P'(X',Y',Z')对应的四元数p'=q*p*r,可以验证p'也是一个虚四元数。关于四元数的乘法可参考Grassmann product
  • 轴角对应的四元数q=cos(θ/2)+sin(θ/2)(xi+yj+zk)

三维空间里一个点绕矢量旋转后的新的点的坐标相关推荐

  1. 图像中某点绕点旋转后的坐标,图像旋转坐标位置

    图像中某点绕点旋转后的坐标,图像旋转坐标位置 在平面坐标上,任意点P(x1,y1),绕一个坐标点Q(x2,y2)旋转θ角度后,新的坐标设为(x, y)的计算公式: x= (x1 - x2)*cos(θ ...

  2. 用c语言大一个三角形图形,c语言图形,请高手修改,效果是一个三角形绕一点旋转一周...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define PAI 3.14159265 void fdw(float m[][3]) {unsigned cou ...

  3. 三角形旋转c语言程序,c语言图形,请高手修改,效果是一个三角形绕一点旋转一周...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define PAI 3.14159265 void fdw(float m[][3]) {unsigned cou ...

  4. 求在平面直角坐标系中,一个点绕坐标原点旋转一定角度后点的坐标

    如图,在平面直角坐标系中(忽略坐标轴上的刻度值),求坐标点P0(x0, y0)绕坐标原点旋转角度B后得到新的点的坐标P1(x1, y1).这是最基本的坐标点绕坐标原点旋转问题,通过这样的思想我们还可以 ...

  5. 关于图像旋转以及旋转后对应像素的位置

    参考链接:http://www.echojb.com/image/2016/11/14/258268.html 一.首先来说一下关于像素旋转一定角度后的对应位置: (1)旋转中心为左上角原点: 旋转有 ...

  6. halcon旋转后坐标_FPGA大赛【八】具体模块设计图像旋转方案

    [注]该项目是我们团队参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.该项目最终晋级决赛,并获得紫光同创企业特别奖.该系列文章介绍我们团队的作品.关注公众号"数字积 ...

  7. 图像旋转后显示不完全

    下面我们来看看更通常一点的做法:以图像的中心为圆心进行旋转. 这里涉及到一个坐标系的转换问题.看下图: 在矩阵中我们的坐标系通常是AB和AC方向的,而传统的笛卡尔直角坐标系是DE和DF方向的. 令图像 ...

  8. Cesium坐标转换:已知两点,计算以一个点为圆心,将另一个点旋转一定度数后的新点的坐标/position_A绕position_B逆时针旋转angle度(角度)得到新点

    //position_A绕position_B逆时针旋转angle度(角度)得到新点 function rotatedPointByAngle(position_A, position_B, angl ...

  9. java矩形翻转_如何判断一个点在旋转后的矩形中

    前言 最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体.在此做个记录 如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体.显然这是不 ...

最新文章

  1. Linux下安装Dubbo运行环境
  2. jstorm mysql_zookeeper,kafka,jstorm,memcached,mysql流式数据处理平台部署
  3. python批量检索文献_自从用了Python,轻松查文献,释放80%的重复劳动时间!
  4. 然爸读书笔记(2014-2)----影响力
  5. java8 camel_Meet Fabric8:基于Camel和ActiveMQ的开源集成平台
  6. python Lambda 表达式
  7. 每天进步一点点《ML - DBSCAN》
  8. Weblogic负载均衡/Session复制之集群架构续
  9. 这不是一篇技术型的文章,而是一篇能让你在IT世界中畅游的方法
  10. ios设备备份,更新路径(mac os)
  11. android广告弹窗插屏,cocos2dx android添加广点通广告平台的---插屏广告
  12. 【极致通话降噪】高通QCC3071 三麦克风通话降噪方案
  13. stm32-DHT11原理及代码解读
  14. 解决物理机为ubuntu与virtualbox客户机为windows10间剪切板不能用的问题
  15. Python线程详解
  16. dsp 正弦波信号发生器matlab程序,基于DSP的正弦波信号发生器源程序(汇编语言).doc...
  17. 计算机软件著作权一般要多久,软件著作权一般多长时间
  18. cocos-lua学习笔记(九)动作
  19. python实现《直觉模糊集决策与对策分析方法》01基本理论与算子
  20. ROS机器人程序设计(原书第2版)补充资料 教学大纲

热门文章

  1. 微信公众号开发,清除微信内置浏览器缓存
  2. git登陆用户的配置
  3. 【idea】IDEA常用断点详解
  4. OSG 中 常用的 Uniforms
  5. Could not load dynamic library ‘libcusolver.so.11‘; dlerror: libcusolver.so.11: cannot open shared o
  6. 采样开关的作用计算机控制,计算机控制系统复习要点
  7. Python二叉树详解笔记
  8. DataView RowFilter
  9. python是汇编语言吗-汇编语言最新资讯
  10. 港科喜讯 | 香港科大两位教授荣获立陶宛中央银行颁发的最佳经济学论文奖