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

四元数是什么

1、四元数的构成

四元数是简单的超复数,由实数加上三个虚数单位组成,主要用于在三维空间中表示旋转

四元数原理包含大量数学相关知识,较为复杂,比如:复数、四维空间等等

因此此文章只对其基本构成和基本公式进行学习


一个四元数包含一个标量和一个3D向量

[w,v],w为标量,v为3D向量,展开后为——[w,(x,y,z)]

对于给定的任意一个四元数:表示3D空间中的一个旋转量

这里需要明白一个概念:

  1. 轴-角对:在3D空间中,任意旋转都可以表示,绕着某个轴旋转一个旋转角得到。注意:该轴并不是空间中的x,y,z轴,而是任意一个轴(任意一个向量)。

对于给定旋转,假设为绕着n轴,旋转\beta度,n轴为(x,y,z),那么可以构成四元数为:

四元数Q=\left[ cos(\beta/2),sin(\beta/2)n\right ],n展开后为:

四元数Q=\left[cos(\beta/2), sin(\beta/2)x,sin(\beta/2)y,sin(\beta/2)z \right ]

四元数Q则表示绕着轴n,旋转\beta度的旋转量

 2、Unity中的四元数

Quaternion:是Unity中表示四元数的结构体

轴角对公式初始化:

四元数Q=\left[cos(\beta/2), sin(\beta/2)x,sin(\beta/2)y,sin(\beta/2)z \right ]

Quaternion q = new Quaternion \left(cos(\beta/2), sin(\beta/2)x,sin(\beta/2)y,sin(\beta/2)z \right )

例如绕着x轴旋转60度

Quaternion q = new Quaternion(Mahtf.Sin(30 * Mathf.Deg2Rad) * 1, 0, 0, Mathf.Cos(30 * Mathf.Deg2Rad));

轴角对方法初始化:

四元数Q = Quaternion.AngleAxis(角度,轴)
Quaternion q = Quaternion.AngleAxis(60, Vector3.right)

3、四元数和欧拉角的转换

欧拉角转四元数:

Quaternion.Euler(x,y,z)

四元数转欧拉角:

Quaternion q;
q.eulerAngles

4、四元数弥补的欧拉角缺点

注意:四元数相乘代表旋转四元数

比如,以下表示绕自身y轴旋转1度,角度范围为[-180,180]

this.transform.rotation *= Quaternion.AngleAxis(1, Vector3.up);

(1)同意旋转的表示不唯一,因为角度范围有限

(2)不会有万向节死锁,即使在Unity中欧拉角x轴旋转90度

注意:我们一般不会直接通过四元数的w,x,y,z进行修改

相关文章:

  • 大衣哥家里再添喜事,生产厂家免费送给他一辆新车
  • 爬取疫情数据并存到mysql数据库
  • 场景应用:网络的子网掩码为255.255.240.0,它能够处理的主机数是多少?
  • Qt5开发从入门到精通——第七篇六节( 图形视图—— 图元的旋转、缩放、切变、和位移)
  • 内网穿透工具natapp的注册、下载、安装与使用(详细教程)
  • CDH openssl 安装报错 TXT_DB error number 2
  • 【Linux线程同步专题】一、什么是线程同步、互斥量与死锁
  • 内网渗透-Linux权限维持
  • Git 便捷操作
  • 美国项目管理协会和埃森哲最新报告:越来越多的公司设立首席转型官一职
  • y145.第八章 Servless和Knative从入门到精通 -- 消息系统基础和Eventing及实践(九)
  • CDQ整体二分-三维偏序(陌上花开)
  • Vue3+elementplus搭建通用管理系统实例十三:添加树形选择器及多选功能
  • GBASE 8s 高可用配置参数
  • 大白话paxos raft
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Git学习与使用心得(1)—— 初始化
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS实现简单的MVC模式开发小游戏
  • JS学习笔记——闭包
  • learning koa2.x
  • mysql_config not found
  • October CMS - 快速入门 9 Images And Galleries
  • oschina
  • PHP那些事儿
  • Python_OOP
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • tweak 支持第三方库
  • Vultr 教程目录
  • 二维平面内的碰撞检测【一】
  • 解决iview多表头动态更改列元素发生的错误
  • 前端路由实现-history
  • 如何设计一个比特币钱包服务
  • 设计模式走一遍---观察者模式
  • 深入浅出Node.js
  • 消息队列系列二(IOT中消息队列的应用)
  •  一套莫尔斯电报听写、翻译系统
  • 用jQuery怎么做到前后端分离
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • scrapy中间件源码分析及常用中间件大全
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 透过事物看本质的能力怎么培养?
  • #《AI中文版》V3 第 1 章 概述
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (06)金属布线——为半导体注入生命的连接
  • (33)STM32——485实验笔记
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (九)One-Wire总线-DS18B20
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置