unity3d————四元数的计算

server/2024/11/14 6:54:24/

1.四元数相乘

代码示例:

     void Start(){Quaternion q = Quaternion.AngleAxis(20, Vector3.up);this.transform.rotation *= q;this.transform.rotation *= q;}

我们首先创建一个四元数 q  根据 Quaternion.AngleAxis(20, Vector3.up); 返回一个四元数 ,先讲解api  

public static Quaternion AngleAxis(float angle, Vector3 axis);

参数

  • angle: 旋转的角度,以度为单位。正值表示顺时针旋转(从轴的负方向看向正方向),负值表示逆时针旋转。
  • axis: 旋转的轴,是一个 Vector3 对象。这个轴不需要是单位向量(即长度为1的向量),方法内部会自动对其进行归一化处理。但是,为了避免潜在的数值问题,最好传入一个已经归一化的向量。

返回值

  • 返回一个 Quaternion 对象,表示围绕指定轴旋转指定角度的旋转。

用法

Quaternion.AngleAxis 方法通常用于创建表示特定旋转的四元数,这个四元数随后可以用于旋转物体、计算旋转后的方向等。

注意事项

  • 旋转的角度是以度为单位,而不是弧度。如果你习惯使用弧度,你需要将弧度转换为度(1 弧度 ≈ 57.2958 度)。
  • 旋转轴会被归一化,所以即使你传入了一个长度不为1的向量,方法也会正确地计算旋转。但是,为了避免潜在的数值误差,最好还是传入单位向量。
  • 四元数旋转是累积的,所以如果你连续应用多个 Quaternion.AngleAxis 创建的旋转,最终的结果将是所有这些旋转的组合。
  • 在某些情况下,你可能会遇到“万向锁”(Gimbal Lock)的问题,这是在使用欧拉角(Euler Angles)进行旋转时可能出现的。使用四元数可以避免这个问题,因为它们提供了更稳定、更平滑的旋转表示。
  • 参数axis 他代表的是物体的坐标系 不是世界坐标系  ;也就是说他只会围绕自己去旋转

运行结果:

 

 

我们发现面板的欧拉角显示很怪异 这个无需担心 因为里面的东西 不用在意 我们只需要关注实现我们的功能模块就行 

2.四元数乘向量 

代码示例:

     void Start(){Quaternion q = Quaternion.AngleAxis(20, Vector3.up);this.transform.rotation *= q;this.transform.rotation *= q;Vector3 v = Vector3.forward;print(v); // 001v = Quaternion.AngleAxis(45, Vector3.up) * v;  print(v);  //v = Quaternion.AngleAxis(45, Vector3.up) * v;print(v);  //100}

      运行结果:

四元数乘向量的作用

  • 当一个四元数(表示一个旋转)乘以一个向量时,结果是一个新的向量,这个新向量是原向量经过该四元数所表示的旋转后得到的。
  • 简单来说,四元数乘向量的操作实现了向量的旋转。

运算规则

  • 四元数乘向量的运算规则是右乘(Quaternion * Vector3),而不是左乘(Vector3 * Quaternion)。这是因为四元数乘法不满足交换律。

 


http://www.ppmy.cn/server/141351.html

相关文章

python manage.py命令集

python manage.py 是 Django 框架中用于管理 Django 项目的命令行工具。它提供了一系列命令,用于创建应用、运行服务器、创建数据库迁移、管理静态文件等。 startproject python manage.py startproject myproject 创建一个新的 Django 项目。myproject 是项目的…

【Django】Clickjacking点击劫持攻击实现和防御措施

Clickjacking点击劫持 1、clickjacking攻击2、clickjacking攻击场景 1、clickjacking攻击 clickjacking攻击又称为点击劫持攻击,是一种在网页中将恶意代码等隐藏在看似无害的内容(如按钮)之下,并诱使用户点击的手段。 2、clickj…

零钱兑换(DP)

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…

Eclipse下载与安装

发现一篇好文章,适合小白下载eclipse 链接:eclipse下载与安装(汉化教程)超详细-CSDN博客

虚拟化技术在数据中心中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 虚拟化技术在数据中心中的应用 虚拟化技术在数据中心中的应用 虚拟化技术在数据中心中的应用 引言 虚拟化技术概述 定义与原理 发…

shell基础

一、理解bash基础 默认的Linux shell——Bash(Bourne Again SHell)可以通过命令控制系统,执行文件操作,或者启动应用程序。它可以在命令行上交互式使用,或者你可以创建一个包含多个shell命令的文件,并像启…

ubuntu22.04 密钥存储在过时的 trusted.gpg 密钥环中

ubuntu22.04 密钥存储在过时的 trusted.gpg 密钥环中 使用 sudo apt update 命令时,会提示密钥存储在过时的 trusted.gpg 密钥环中,具体提示内容如下: W: https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists/jammy/InRelease: 密钥…

梧桐数据库聚合函数使用举例

在数据分析和数据库管理中,聚合函数是一类非常重要的工具,它们能够对数据集进行计算并返回单个结果。梧桐数据库提供了丰富的聚合函数,这些函数可以帮助我们快速地对数据进行汇总、分析和处理。本文将介绍梧桐数据库中一些常用的聚合函数及其…