高效四元数到欧拉变换

2023-12-03

我使用以下 Python 函数将四元数转换为欧拉角:

import math

def quaternion_to_euler_angle(w, x, y, z):
    ysqr = y * y

    t0 = +2.0 * (w * x + y * z)
    t1 = +1.0 - 2.0 * (x * x + ysqr)
    X = math.degrees(math.atan2(t0, t1))

    t2 = +2.0 * (w * y - z * x)
    t2 = +1.0 if t2 > +1.0 else t2
    t2 = -1.0 if t2 < -1.0 else t2
    Y = math.degrees(math.asin(t2))

    t3 = +2.0 * (w * z + x * y)
    t4 = +1.0 - 2.0 * (ysqr + z * z)
    Z = math.degrees(math.atan2(t3, t4))

    return X, Y, Z

我想将具有“w”、“quat_x”、“quat_y”和“quat_z”列的 Pandas DataFrame 转换为欧拉角。目前,我正在使用 for 循环迭代 DataFrame 的每一行并调用quaternion_to_euler_angle()每行上的函数。这非常慢,因为我有超过 400'000 行。

有更有效的方法吗?例如,我可以将 DataFrame (或单个系列)传递给quaternion_to_euler_angle()但问题是要改变quaternion_to_euler_angle()这样它就可以处理 DataFrame 而不是整数。


更紧凑的方法是使用Rotation from scipy.spatial.transform:

import pandas as pd
from scipy.spatial.transform import Rotation

rot = Rotation.from_quat(quat_df)
rot_euler = rot.as_euler('xyz', degrees=True)
euler_df = pd.DataFrame(data=rot_euler, columns=['x', 'y', 'z'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高效四元数到欧拉变换 的相关文章

随机推荐

  • 如何使用主页快速操作打开特定视图

    我是 Swift 新手 一直在使用 SwiftUI 而不是 Storyboard 我在 Info plist 中设置了 UIApplicationShortcutItems 并有两个快速操作可以使用 launchOptions 来显示警报
  • JSON 请求出现无效标签错误

    我读过很多关于这个的文章 但我就是不明白 它与我的代码无关 它与 feed 或其他东西有关 因为如果我将它与 Twitter feed 交换 它会返回一个完美的 Object 对象 getJSON http rockbottom nozzl
  • 偶尔“访问被拒绝”到“C:\WINDOWS\TEMP\”文件

    在我的 ASP NET MVC 应用程序中 当我尝试从 Microsoft Reporting Services 程序集打开或生成 LocalReport 时 有时会出现以下错误 Microsoft Reporting WebForms L
  • 如何使用 TraMineR 和聚合序列数据进行差异分析?

    由于我有一个大数据集和有限的计算资源 我想利用聚合序列对象来差异分析使用 R 包TraMineR and WeightedCluster 但我很难找到合适的syntax因为这样做 在下面的示例代码中 您会发现两个差异分析 差异分析的第一个树
  • 如果路径包含空格,则无法从 VBScript 启动 bat 文件

    例如 我一直在尝试从路径启动 myFileToRun bat 文件 D My Folder batchfiles myFileToRun bat 下面是我尝试运行它的 VBScript Dim WshShell strCurrentDire
  • 如何获取我的设备中安装了多少个应用程序及其名称或上次访问的信息?

    我需要在我的应用程序中显示上次访问的应用程序信息 我怎样才能得到这些信息 您可以使用此代码来获取应用程序列表 PackageManager pm this getPackageManager Intent intent new Intent
  • postDelayed是否会导致消息跳到队列的前面?

    我在 Android 文档中查找 postDelayed发布延迟的文档 这与另一个问题类似 https stackoverflow com questions 25820528 is postdelayed relative to when
  • 执行用包含脚本标签的 XMLHttpRequest 编写的 Javascript?

    通过 JavaScript 请求 XMLHttpRequest使用一些额外的 Javascript 进行响应 这些额外的 Javascript 需要添加到请求页面的页面中 使用 eval 如果响应类似于 alert This is the
  • 如何在 Swift 3 中同时发出 https 请求

    我在执行 https 请求时遇到问题 如果请求没有任何错误 我永远不会收到消息 这是一个命令行工具应用程序 我有一个允许 http 请求的 plist 我总是看到完成块 typealias escHandler URLResponse Da
  • 使用 Apache Camel 重复从只读文件系统轮询文件(幂等 = false)?

    我正在使用轮询消费者模式来读取给定只读目录中的所有文件并处理它们 是否可以选择忽略幂等性 我知道用 noop true 和 idempot false 定义的路由会使整个系统崩溃 无限循环 但池消费者模式是在给定时刻触发的一次性操作 Cam
  • 如何引用vue、js pug模板中的数据?

    基本上我试图从事件名称创建永久链接 当我使用 v model 从事件名称中获取值时 它可以工作 但是如何将转换后的永久链接放回到 pug 的另一个输入框中 这有效 P message textarea rows 2 message 但是当我
  • spring/hibernate:每次打开/关闭会话 VS getCurrentSession

    这些方法之间有什么区别 哪一种更好 到目前为止 我的代码片段如下 public void delete Song song session sessionFactory getCurrentSession session delete so
  • Oracle 11g 的 NHibernate TransactionScope 问题

    以下代码片段在 SQL Server 2008 SP1 中工作正常 但在 Oracle 11g 中 对 session BeginTransaction 的调用会引发异常 并显示消息 连接已经是本地或分布式事务的一部分 堆栈跟踪如下所示 使
  • Amazon Route 53 + Heroku 应用程序无法从某些地方访问 - 该怎么办?

    我正在 Heroku 上工作 在网络方面没有太多背景 我正在开发的应用程序似乎无法从某些地方访问 我们收到了人们无法访问它的报告 我们使用的 ping 服务 Statuscake 报告该站点始终无法从某些节点位置访问 为了解决这个问题 我们
  • Netbeans 15 和 payara 6.2022

    我在 JDK 17 上运行 Netbeans 15 我想尝试 Jakarta EE 10 因此我决定将我的应用程序服务器升级到 Payara 6 2022 1 Alpha 4 应用程序服务器工作正常 我可以在更新大量库后将我的应用程序部署到
  • PHP rtrim“.php”

    我想从字符串末尾删除 php 如果存在 考虑一下 filename index rtrim filename php returns index filename search rtrim filename php returns sear
  • .Net Maui - 如何返回根页面

    我觉得我只是没有向谷歌霸主问这个问题 所以我想看看是否有人可以帮助解释如何做到这一点 我有一个新的 Net Maui 应用程序 它使用 4 个不同的视图 页面 我创建的 MainPage 根 允许我从我们的数据库中搜索用户 然后将您转换到新
  • 在 Swift 4 中用一根手指进行旋转

    我创建了一个 UIGestureRecognizer 来仅用一根手指旋转视图 视图在开始时旋转 但一旦达到一定程度 就会向另一个方向旋转 你能帮我修改我的代码吗 UI视图控制器 override func viewDidLoad super
  • 编写一个肯定会陷入死锁的程序[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我最近在采访中被问到这个问题 我回答说如果交错出错就会出现死锁 但是面试官坚持说可以写一个不管交错总是陷入死锁的程序 我们可以写这样的程序吗 你能给我指一些类似的示例程序吗 UP
  • 高效四元数到欧拉变换

    我使用以下 Python 函数将四元数转换为欧拉角 import math def quaternion to euler angle w x y z ysqr y y t0 2 0 w x y z t1 1 0 2 0 x x ysqr