罗德里格斯公式简要介绍

一、罗德里格斯公式(Rodrigues’ rotation formula)是一个用于计算绕任意轴旋转向量的数学公式。它是由欧仁·罗德里格斯(Olinde Rodrigues)在1840年提出的。这个公式在三维空间中描述了一个向量绕着单位向量旋转θ角度后的结果。

设v是一个待旋转的三维向量,k是单位旋转轴(必须是单位向量),θ是旋转角度(通常以弧度为单位),则v绕k旋转θ角度后的向量v’可以通过罗德里格斯公式计算得到:

v’ = v * cos(θ) + (k × v) * sin(θ) + k * (k ⋅ v) * (1 - cos(θ))

其中:

  • v’ 是旋转后的向量。

  • cos 和 sin 分别表示余弦和正弦函数。

  • × 表示向量叉乘。

  • ⋅ 表示向量点乘。

罗德里格斯公式是由以下几个部分组成的:

  1. v * cos(θ):v 在旋转轴平行方向的分量,在旋转中不会改变。

  2. (k × v) * sin(θ):v 在垂直于旋转轴的平面上的分量,绕轴旋转后的分量。

  3. k * (k ⋅ v) * (1 - cos(θ)):v 在旋转轴方向上的分量,这部分分量在旋转中增强了旋转轴方向的分量。

在图形学、机器人技术、航空航天和其他需要旋转向量的领域中,罗德里格斯公式是一种简单而有效的计算工具。此外,罗德里格斯公式也常被用来构造旋转矩阵或四元数,这在实现三维旋转时非常有用。

二、从轴角变换到旋转矩阵可以使用罗德里格斯公式进行转换

罗德里格斯公式可以用来从轴角表示(axis-angle representation)转换到旋转矩阵。轴角表示是一种描述旋转的方式,它使用一个单位旋转轴 k 和旋转角度 θ 来表示三维空间中的旋转。

给定单位旋转轴 k = (kx, ky, kz).T和旋转角度 θ,可以通过罗德里格斯旋转公式构造对应的旋转矩阵 R:

R = I + sin(θ) * K + (1 - cos(θ)) * K^2;

有的教材也写成:

R = cos(θ) * I + sin(θ) * K + (1 - cos(θ)) * (k * k.T),其中k = (kx, ky, kz).T为列向量

这两个公式其实是一样的。

这里:

  • I 是单位矩阵。

  • K 是根据旋转轴 k 定义的反对称矩阵。其形式如下:

K = \begin{vmatrix}0 &-kz &ky \\ kz &0 &-kx \\ -ky &kx &0 \end{vmatrix}

  • K^2 表示矩阵 K 与自身的矩阵乘积。

将 K 和 K^2 计算出来并代入上述公式,就可以得到完整的旋转矩阵 R。这个矩阵可以用来作用于任意向量 v,即通过矩阵-向量乘法 Rv 来实现向量 v 绕轴 k 旋转 θ 角度的效果。

python案例

R = I + sin(θ) * K + (1 - cos(θ)) * K^2;

import numpy as np
# 这边没有转变成列向量,因为不需要,之后都是大K的计算
k = np.array([1, 0, 0])
# x轴旋转90度
theta = np.pi / 2
K = np.array([[0, -k[2], k[1]],[k[2], 0, -k[0]],[-k[1], k[0], 0]])
K_squared = np.dot(K, K)
# 通过罗德里格斯公式计算旋转矩阵
R = np.eye(3) + (1 - np.cos(theta)) * K_squared + np.sin(theta) * K
print(np.round(R, 5))

R = cos(θ) * I + sin(θ) * K + (1 - cos(θ)) * (k * k.T)

import numpy as np
# 这边特意把k转变成列向量
k = np.array([1, 0, 0]).reshape((-1, 1))
theta = np.pi / 2
K = np.array([[0, -k[2][0], k[1][0]],[k[2][0], 0, -k[0][0]],[-k[1][0], k[0][0], 0]])
# K_squared = np.dot(K, K)
print(k, k.T)
K_squared = np.dot(k, k.T)
print(K_squared)
R = np.cos(theta) * np.eye(3) + (1 - np.cos(theta)) * K_squared + np.sin(theta) * K
print(np.round(R, 5))

结果都是一样的,最多就是精度有所差别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2779619.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】学习-文件的软硬链接

文件的软硬链接 在上一篇拓展篇—文件系统中我们介绍过文件元的概念: 我们在使用ls -l命令查看文件元信息的时候,有一个硬链接数,说明文件的硬链接数属于文件的属性之一,那么硬链接究竟是什么呢?软链接又是什么呢&…

【闲谈】开源软件的崛起与影响

随着信息技术的快速发展,开源软件已经成为软件开发的趋势,并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点,使得越来越多的企业和个人选择使用开源软件,促进了软件行业的繁荣。然而,在使用开源软件的过…

CSS Selector—选择方法,和html自动——异步社区的爬取(动态网页)——爬虫(get和post的区别)

这里先说一下GET请求和POST请求: post我们平时是要加data的也就是信息,你会发现我们平时百度之类的 搜索都是post请求 get我们带的是params,是发送我们指定的内容。 要注意是get和post请求!!! 先说一下异…

STM32Cubmax DAC 采集

一、概念 DMA,全称为: Direct Memory Access,即直接存储器访问, DMA 传输将数据从一个 地址空间复制到另外一个地址空间。 当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动…

【开源】基于JAVA+Vue+SpringBoot的假日旅社管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统介绍2.2 QA 问答 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿评论4.3 查询民宿新闻4.4 新建民宿预订单4.5 查询我的民宿预订单 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的假日旅社…

QGIS Desktop工具转换png文件为TIF文件

https://qgis.org/ QGIS Desktop 3.34.3 菜单 Layer -> Georeferencer 选择 文件 点击 加载的图片的左上角的点 弹窗中没有数据 录入 0 0 再加入右侧下面的点 调整下 数据 点击 绿色的箭头按钮 输出TIF文件 GeoServer中添加 存储仓库 点击 GeoTIFF 录入,选…

Docker Compose实例

目录 一、前提说明 二、简单的Docker容器部署案例 1. Dockerfile 配置 2. docker-compose.yml 配置 3. application-prod.properties 配置 4. pom.xml 配置 5. 上传文件 6. 创建基础Docker镜像 7. docker-compose.yml编排 8. 停止并删除容器编排 三、案例地址 一、前…

大模型实战营第二期——3. 基于 InternLM 和 LangChain 搭建你的知识库

github地址:InternLM/tutorial-书生浦语大模型实战营文档地址:基于 InternLM 和 LangChain 搭建你的知识库视频地址:基于 InternLM 和 LangChain 搭建你的知识库Intern Studio: https://studio.intern-ai.org.cn/console/instance动手学大模型…

Linux基础-配置网络

Linux配置网络的方式 1.图形界面 右上角-wired-配置 点加号-新建网络配置文件2.NetworkManager工具 2.1用图形终端nmtui 1.新建网络配置文件add 1.指定网络设备的类型Ethernet 2.配置网络配置文件的名称,名称可以有空格 3.配置网络配置文件对应的物理网络设备的…

《21天精通IPv4 to IPv6》第4天:理解IPv6子网划分规则——如何为不同的系统划分IPv6子网?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

前端工程化面试题 | 02.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

内网安全-内网穿透

目录 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 ssh代理内网穿透 ssh配置socket代理 MSF多级网络穿透 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 1、termite 之前叫ew (可以进行正向连接,可以…

Python运算符大全,值得收藏

一、 Python的算术运算 Python的算术运算符与C语言类似&#xff0c;略有不同。包括加()、减(-)、乘(*)、除(/)、取余(%)、按位或(|)、按位与(&)、按位求补(~)、左移位(<<)、右移位(>>)、单目求反(-)、幂运算(**)、整除运算(//)、增强运算、增强矩阵乘法()。 …

05.坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角&#xff0c;X向右增长&#xff0c;Y向下增长。 2.设置控件位置 设置控件位置&#xff0c;就相当于是需要指定控件的坐标&#xff0c;对于该控件来说&#xff0c;其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换 1 投票策略 考虑到外点率太高 ①让直线上的每一点投票 ②希望噪声点不要给具体的任何模型投票&#xff0c;即噪声点不会有一致性的答案 ③即使被遮挡了&#xff0c;也能把直线找出来 参数空间离散化 直线相当于就是m,b两…

机器学习:过拟合和欠拟合的介绍与解决方法

过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合&#xff0c;还有一种是适度拟合&#xff0c;适度拟合就是我们模型训练想要达到的状态&#xff0c;不过适度拟合这个词平时真的好少见。 过拟合 过拟合的表现 模型在训练集上的表现非常好&#xff0c;但是在测试集…

【开源】SpringBoot框架开发天沐瑜伽馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

【动态规划】1301. 最大得分的路径数目

作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCoce1301. 最大得分的路径数目 给你一个正方形字符数组 board &#xff0c;你从数组最右下方的字符 ‘S’ 出发。 你的目标是到达数组最左上角的字符 ‘E’ &#xff0c;数组剩余…

tkinter-TinUI-xml实战(10)展示画廊

tkinter-TinUI-xml实战&#xff08;10&#xff09;展示画廊 引言声明文件结构核心代码主界面统一展示控件控件展示界面单一展示已有展示多类展示 最终效果在这里插入图片描述 ![](https://img-blog.csdnimg.cn/direct/286fcaa2fa5648a992a0ac79b4efad82.png) ………… 结语 引言…

二叉树和堆(优先队列)

前言&#xff1a; 本章会讲解二叉树及其一些相关练习题&#xff0c;和堆是什么。 二叉树&#xff1a; 二叉树的一些概念&#xff1a; 一棵二叉树是有限节点的集合&#xff0c;该集合可能为空。二叉树的特点是每一个节点最多有两个子树&#xff0c;即二叉树不存在度大于2的节点…