当前位置: 首页 > backend >正文

Rodrigues旋转公式-绕任意轴旋转

Rodrigues旋转公式

给定旋转轴单位向量 k = ( k x , k y , k z ) \mathbf{k}=(k_x,k_y,k_z) k=(kx,ky,kz)和旋转角度 θ \theta θ,旋转矩阵 R R R可以表示为:
R = I + sin ⁡ θ K + ( 1 − cos ⁡ θ ) K 2 R=I+\sin \theta K+(1-\cos \theta)K^2 R=I+sinθK+(1cosθ)K2

其中:

  • I I I是单位矩阵
  • K K K是向量 k \mathbf{k} k的叉积矩阵:

K = [ 0 − k z k y k z 0 − k x − k y k x 0 ] K=\begin{bmatrix} 0&-k_z&k_y\\ k_z&0&-k_x\\ -k_y&k_x&0 \end{bmatrix} K= 0kzkykz0kxkykx0

推导过程

在这里插入图片描述
将向量 v \mathbf{v} v分解为平行和垂直于 k \mathbf{k} k的分量:
v = v ∥ + v ⊥ \mathbf{v}=\mathbf{v}_\parallel+\mathbf{v}_\perp v=v+v

其中:
v ∥ = ( v ⋅ k ) k v ⊥ = v − v ∥ \mathbf{v}_\parallel=(\mathbf{v}\cdot\mathbf{k})\mathbf{k} \\ \mathbf{v}_\perp=\mathbf{v}-\mathbf{v}_\parallel v=(vk)kv=vv

平行分量 v ∥ \mathbf{v}_\parallel v旋转后不变
垂直分量 v ⊥ \mathbf{v}_\perp v旋转后在垂直于 k \mathbf{k} k的平面内旋转 θ \theta θ角度:
v ⊥ R O T = cos ⁡ θ v ⊥ + sin ⁡ θ ( k × v ) \mathbf{v}_\perp^{ROT}=\cos\theta\mathbf{v}_\perp+\sin\theta(\mathbf{k}\times\mathbf{v}) vROT=cosθv+sinθ(k×v)

旋转后的向量为:
v R O T = v ∥ + v ⊥ R O T \mathbf{v}^{ROT}=\mathbf{v}_\parallel+\mathbf{v}_\perp^{ROT} vROT=v+vROT

= ( v ⋅ k ) k + cos ⁡ θ ( v − ( v ⋅ k ) k ) + sin ⁡ θ ( k × v ) =(\mathbf{v}\cdot\mathbf{k})\mathbf{k}+\cos\theta(\mathbf{v}-(\mathbf{v}\cdot\mathbf{k})\mathbf{k})+\sin\theta(\mathbf{k}\times\mathbf{v}) =(vk)k+cosθ(v(vk)k)+sinθ(k×v)

利用叉积矩阵 K K K,其中 k × v = K v \mathbf{k}\times\mathbf{v}=K\mathbf{v} k×v=Kv,可以写成:
v R O T = cos ⁡ θ v + sin ⁡ θ K v + ( 1 − cos ⁡ θ ) ( v ⋅ k ) k \mathbf{v}^{ROT}=\cos\theta \mathbf{v}+\sin\theta K\mathbf{v}+(1-\cos\theta)(\mathbf{v}\cdot\mathbf{k})\mathbf{k} vROT=cosθv+sinθKv+(1cosθ)(vk)k

又因为 ( v ⋅ k ) k = M v (\mathbf{v}\cdot\mathbf{k})\mathbf{k} = M\mathbf{v} (vk)k=Mv M = k ⋅ k T M = \mathbf{k}\cdot\mathbf{k}^{T} M=kkT,可以写成:
v R O T = cos ⁡ θ v + sin ⁡ θ K v + ( 1 − cos ⁡ θ ) M v \mathbf{v}^{ROT}=\cos\theta \mathbf{v}+\sin\theta K\mathbf{v}+(1-\cos\theta)M\mathbf{v} vROT=cosθv+sinθKv+(1cosθ)Mv

= [ cos ⁡ θ I + sin ⁡ θ K + ( 1 − cos ⁡ θ ) M ] v =\left[\cos\theta I+\sin\theta K+(1-\cos\theta)M\right]\mathbf{v} =[cosθI+sinθK+(1cosθ)M]v
因此旋转矩阵为:

R = I + sin ⁡ θ K + ( 1 − cos ⁡ θ ) M R=I+\sin\theta K+(1-\cos\theta)M R=I+sinθK+(1cosθ)M

展开后得到:
R = [ cos ⁡ θ + k x 2 ( 1 − cos ⁡ θ ) k x k y ( 1 − cos ⁡ θ ) − k z sin ⁡ θ k x k z ( 1 − cos ⁡ θ ) + k y sin ⁡ θ k y k x ( 1 − cos ⁡ θ ) + k z sin ⁡ θ cos ⁡ θ + k y 2 ( 1 − cos ⁡ θ ) k y k z ( 1 − cos ⁡ θ ) − k x sin ⁡ θ k z k x ( 1 − cos ⁡ θ ) − k y sin ⁡ θ k z k y ( 1 − cos ⁡ θ ) + k x sin ⁡ θ cos ⁡ θ + k z 2 ( 1 − cos ⁡ θ ) ] R=\begin{bmatrix} \cos\theta+k_x^2(1-\cos\theta)&k_xk_y(1-\cos\theta)-k_z\sin\theta&k_xk_z(1-\cos\theta)+k_y\sin\theta\\ k_yk_x(1-\cos\theta)+k_z\sin\theta&\cos\theta+k_y^2(1-\cos\theta)&k_yk_z(1-\cos\theta)-k_x\sin\theta\\ k_zk_x(1-\cos\theta)-k_y\sin\theta&k_zk_y(1-\cos\theta)+k_x\sin\theta&\cos\theta+k_z^2(1-\cos\theta) \end{bmatrix} R= cosθ+kx2(1cosθ)kykx(1cosθ)+kzsinθkzkx(1cosθ)kysinθkxky(1cosθ)kzsinθcosθ+ky2(1cosθ)kzky(1cosθ)+kxsinθkxkz(1cosθ)+kysinθkykz(1cosθ)kxsinθcosθ+kz2(1cosθ)

http://www.xdnf.cn/news/5859.html

相关文章:

  • Excel宏和VBA的详细分步指南
  • Linux系统:文件系统前言,详解CHSLBA地址
  • 如何创建maven项目
  • java之网络编程
  • uniapp(vue3)动态计算swiper高度封装自定义hook
  • SD-HOST Controller design-----SD CLK 设计
  • 深度学习之优化器【从梯度下降到自适应学习率算法】(pytorch版)
  • 华为鸿蒙电脑能否作为开发机?开发非鸿蒙应用?
  • 微服务的“导航系统”:使用Spring Cloud Eureka实现服务注册与发现
  • 销售具备的能力有哪些
  • JAVA研发+前后端分离,ZKmall开源商城B2C商城如何保障系统性能?
  • Python中元组(Tuple)使用详解和注意事项
  • Kotlin 中的 Unit 类型的作用以及 Java 中 Void 的区别
  • 拓扑排序+dp
  • STM32-DMA数据转运(8)
  • 直接在Excel中用Python Matplotlib/Seaborn/Plotly......
  • Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析
  • 思迈特软件携手天阳科技,打造ChatBI金融智能分析新标杆
  • 适应性神经树:当深度学习遇上决策树的“生长法则”
  • Spring Boot 整合 Redis 实战
  • MySQL 事务(二)
  • 在 Qt Creator 中为 QDockWidget 设置隐藏和显示按钮
  • 中电金信参编的国家标准《信息技术 中间件 消息中间件技术要求》正式发布
  • 【爬虫】DrissionPage-1
  • 【TDengine源码阅读】#if defined(__APPLE__)
  • (C语言)超市管理系统(测试版)(指针)(数据结构)(二进制文件读写)
  • Android支持离线功能的复杂业务场景(如编辑、同步):设计数据同步策略的解决方案
  • 基于大模型的腰椎管狭窄术前、术中、术后全流程预测与治疗方案研究报告
  • 数据服务包括哪些内容?一文讲清数据服务模块的主要功能!
  • 【HarmonyOs鸿蒙】七种传参方式