温故知新,数学之美,欧拉角转四元数
简介
要将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);
}
}
说明
-
欧拉角转四元数
- Roll(绕X轴旋转)
- Pitch(绕Y轴旋转)
- Yaw(绕Z轴旋转)
这些角度通常表示的是飞机或物体在三维空间中的姿态。该函数将欧拉角转换为四元数,使用 ZYX 顺序。
- 半角公式
每个旋转角度在转换为四元数时,需要用到三角函数(Sin 和 Cos)并基于角度的一半进行计算(例如,yawRad * 0.5)。
- 返回的四元数
四元数由 4 个分量组成:W, X, Y 和 Z,它们共同描述了物体的旋转。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-10-22 乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 浅析ASP.NET Core可用性设计,使用Polly定义重试、熔断、限流、降级策略
2021-10-22 乘风破浪,遇见最美Windows 11之新微软商店(Microsoft Store)生态 - Win11安卓应用集锦