首页 > 其他分享 >温故知新,数学之美,欧拉角转四元数

温故知新,数学之美,欧拉角转四元数

时间:2024-10-22 21:10:13浏览次数:7  
标签:欧拉角 double 0.5 之美 四元 温故知新 public Math

简介

image

要将Roll,Pitch和Yaw转换为四元数,可以按照以下步骤来实现。

这个过程主要是基于欧拉角的旋转顺序(通常是ZYX顺序:Yaw-Pitch-Roll)。四元数是用来表示三维空间中的旋转的数学工具,它避免了欧拉角带来的万向节锁问题。

代码

using System;

public class Quaternion
{
    public double W { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
    public double Z { get; set; }

    public Quaternion(double w, double x, double y, double z)
    {
        W = w;
        X = x;
        Y = y;
        Z = z;
    }

    public override string ToString()
    {
        return $"Quaternion(W: {W}, X: {X}, Y: {Y}, Z: {Z})";
    }
}

public class Program
{
    public static Quaternion YDR2Quanterion(double roll, double pitch, double yaw)
    {
        // 将角度转换为弧度
        double rollRad = roll * Math.PI / 180.0;
        double pitchRad = pitch * Math.PI / 180.0;
        double yawRad = yaw * Math.PI / 180.0;

        // 计算每个轴的半角三角函数
        double cy = Math.Cos(yawRad * 0.5);
        double sy = Math.Sin(yawRad * 0.5);
        double cp = Math.Cos(pitchRad * 0.5);
        double sp = Math.Sin(pitchRad * 0.5);
        double cr = Math.Cos(rollRad * 0.5);
        double sr = Math.Sin(rollRad * 0.5);

        // 计算四元数分量
        double w = cr * cp * cy + sr * sp * sy;
        double x = sr * cp * cy - cr * sp * sy;
        double y = cr * sp * cy + sr * cp * sy;
        double z = cr * cp * sy - sr * sp * cy;

        return new Quaternion(w, x, y, z);
    }

    public static void Main(string[] args)
    {
        double roll = 30.0;  // 你可以修改这里的值来测试
        double pitch = 45.0;
        double yaw = 60.0;

        Quaternion result = YDR2Quanterion(roll, pitch, yaw);
        Console.WriteLine(result);
    }
}

说明

  1. 欧拉角转四元数

    • Roll(绕X轴旋转)
    • Pitch(绕Y轴旋转)
    • Yaw(绕Z轴旋转)

这些角度通常表示的是飞机或物体在三维空间中的姿态。该函数将欧拉角转换为四元数,使用 ZYX 顺序。

  1. 半角公式

每个旋转角度在转换为四元数时,需要用到三角函数(Sin 和 Cos)并基于角度的一半进行计算(例如,yawRad * 0.5)。

  1. 返回的四元数

四元数由 4 个分量组成:W, X, Y 和 Z,它们共同描述了物体的旋转。

标签:欧拉角,double,0.5,之美,四元,温故知新,public,Math
From: https://www.cnblogs.com/taylorshi/p/18493747

相关文章

  • 【优选算法】探索双指针之美(一):双指针与单调性的完美邂逅
    文章目录前言:1.盛水最多的容器2.有效三角形个数3.和为s的两个数字4.三数之和5.四数之和最后想说:前言:在上一章中我们已经认识到了双指针,在这章里我们就来探索一下当双指针和单调性遇见后会擦出怎样的火花呢?我们就先来几道例题探索一下吧!1.盛水最多的容器题目......
  • 【优选算法篇】编织算法的流动诗篇:滑动窗口的轻盈之美
    文章目录C++滑动窗口详解:基础题解与思维分析前言第一章:热身练习1.1长度最小的子数组解法一(暴力求解)解法二(滑动窗口)滑动窗口的核心思想图解分析滑动窗口的有效性时间复杂度分析易错点提示1.2无重复字符的最长子串解法一(暴力求解)解法二(滑动窗口)图解分析详细说明:1.3......
  • 每日OJ题_牛客_非对称之美_最长非回文字符串_C++_Java
    目录牛客_非对称之美_最长非回文字符串题目解析C++代码Java代码牛客_非对称之美_最长非回文字符串非对称之美(nowcoder.com)题目解析找到规律就是最长非回文字符串(判断是否全同->0,否则是n-1(回文减去1)或n)。C++代码#include<iostream>usingnamespacestd;int......
  • 【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
    文章目录C++模板进阶编程前言第一章:非类型模板参数1.1什么是非类型模板参数?1.1.1非类型模板参数的定义1.2非类型模板参数的注意事项1.3非类型模板参数的使用场景示例:静态数组的实现第二章:模板的特化2.1什么是模板特化?2.1.1模板特化的分类2.2函数模板特化......
  • 探索数学之美:亲和数与程序实现
    摘要:本文以220和284的奇妙邂逅为引,探索了亲和数的神秘世界,并用C语言编织了一个寻找数字间“友谊”的程序。定义亲和数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等比如220的所有因子之和(去除自身),为284284的所有因子和(去除自身),刚好也为220这样,我们就把它们两个称为一对亲......
  • 代码规范&《数学之美》读后感
    大厂代码规范:一:代码要有比较良好的可读性,在必要的地方需要加上注释,一般较复杂的循环程序或函数要适当添加注释。代码不单单是给自己看也是给别人看的,大家读得懂自己的代码可以更好地发现问题并一起解决从而提高编程效率。二:一些称谓尽量少用ABC代替多使用一些有针对意义的词来......
  • 利士策分享,细品礼仪之美:在日常中优雅相处的艺术
    利士策分享,细品礼仪之美:在日常中优雅相处的艺术在当今这个快节奏、高压力的社会里,人与人之间的交往似乎被简化成了快餐式的信息交流。然而,根植于文化深处的礼仪之花,依然是促进社会和谐、深化人际关系的宝贵财富。它不仅是对他人的尊重,更是个人修养的展现。以下,我们将探......
  • 数据结构之美-深入理解树形结构
    一认识树形结构树形结构是一种广泛应用的非线性数据结构,它在计算机科学和日常生活中都有广泛的应用。比如文件系统,邮件系统,编译器语法树,决策树,网络通信,甚至机器学习当中,都有树形数据结构的影子。本文旨在梳理日常用到的各类树形结构以及其优点和劣势,让渎者对树形结构有一个深入......
  • 机器学习中的聚类艺术:探索数据的隐秘之美
    一什么是聚类聚类是一种经典的无监督学习方法,无监督学习的目标是通过对无标记训练样本的学习,发掘和揭示数据集本身潜在的结构与规律,即不依赖于训练数据集的类标记信息。聚类则是试图将数据集的样本划分为若干个互不相交的类簇,从而每个簇对应一个潜在的类别。聚类直观上来......
  • 编码规范&阅《数学之美》有感
    作为计算机专业的大学生在深入学习编写代码前,我认为应当了解一些大公司内部编码规范的核心要素,遵守这些编码规范不仅有助于提高代码质量,而且也是专业发展的必要条件。通过这些规范,可以更好地帮助自己打牢基础,养成良好的编程习惯,同时也为日后进入职场做准备,以适应不同公司的编程文......