首页 > 其他分享 >四元数x向量,相关用法

四元数x向量,相关用法

时间:2023-04-15 23:45:17浏览次数:41  
标签:point Vector3 用法 四元 Camera rotation 旋转 public 向量

Vector3 operator *(Quaterion rotation, Vector3 point)

点绕着原点旋转指定的角度。不管如何旋转这个点都是在一个圆球的表面上(圆球半径为point到原点的距离)。

 

几个例子

测试代码

public class QuatTest : MonoBehaviour
{
    public Vector3 m_QuatEuler;
    private Vector3 m_Point;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            var point = new Vector3(0, 0, -1);
            m_Point = Quaternion.Euler(m_QuatEuler) * point;
        }
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.cyan;
        Gizmos.DrawLine(Vector3.zero, m_Point);
    }

}

1) x轴旋转45度

 

2) x, y轴都旋转45度

 

3) x, y, z都旋转45度,貌似和2)没有区别,主要是point本身就在z轴上,绕z轴旋转没任何效果的

 

一些疑问

有时候,我们会看到this.transform.rotation * point直接这样用,如果用this.transform.localRotation * point有区别吗?

1) 有区别,比如localRotation是x轴30度,rotation却是无任何旋转(parent反方向旋转了),这种情况就不一样了。所以最终是看rotation和localRotation的实际值来决定。

 

 一些用法

1) 使用四元数计算相机的forward向量

var myForward = this.transform.rotation * Vector3.forward;
myForward.Normalize();
Debug.Log($"{myForward.x}, {myForward.y}, {myForward.z}");

var f = this.transform.forward; //上面的结果和这边得到的是一样的
Debug.Log($"{f.x}, {f.y}, {f.z}");

 

2) 相机绕着player旋转

 

using UnityEngine;

[RequireComponent(typeof(Camera))]
public class RotateAround : MonoBehaviour
{

    private Transform m_Camera;

    public Transform m_Player;

    public Vector3 m_OffsetPoint = new Vector3(0.0f, 0.0f, -5.0f);

    private float m_HorizontalAngle = 0.0f;

    void Awake()
    {
        m_Camera = GetComponent<Camera>().transform;
    }

    void Update()
    {
        if (m_Player == null) return;

        if (Input.GetMouseButton(0))
        {
            m_HorizontalAngle += 0.1f;
        }
        else if (Input.GetMouseButton(1))
        {
            m_HorizontalAngle -= 0.1f;
        }

        Quaternion cameraRot = Quaternion.Euler(0, m_HorizontalAngle, 0);
        m_Camera.rotation = cameraRot;

        m_Camera.position = m_Player.position + cameraRot * m_OffsetPoint;
    }

}

 

标签:point,Vector3,用法,四元,Camera,rotation,旋转,public,向量
From: https://www.cnblogs.com/sailJs/p/17318326.html

相关文章

  • Shell特殊用法
    1、${1:-}怎么理解$1是函数的第一个参数看替换的定义,${varname:-word},如果varname存在且非null,则返回其值;否则,返回word。用途:如果变量未定义,则返回默认值。上述替换中的word是空,即,如果1没有定义,就返回空所以,${1:-}的意思就是说,如果函数有第一个参数,就返回这个参数,如果没有,就返回......
  • Delphi FDMemTable内存表用法及简单操作函数封装(转)
    在某些场景下当轻量级的应用需要在内存中缓存数量比较多且字段比较多的高频使用数据时。以前我都是采用Ini或直接使用sqlite数据库。JSON也试过基本无法或很难实现需要的功能,因为当涉及某一同类型对象多字段多列时不通过遍历基本无法直接取到或修改数据。这样就导致了效率的低下。......
  • 跟姥爷深度学习2 TensorFlow的基本用法
    一、前言前面我们浅用TensorFlow做了个天气预测,虽然效果不咋样,但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍,在接口文件的基础上了解各参数的简单含义和用法。二、再次构建模型我们先将之前的冗余代码都删除,做个简单的模型训练和预测。......
  • HTML5链接和图片基础用法
    一、HTML5超链接(链接)超链接可以是一个文本,也可以是一幅图像,您可以点击这些内容来跳转到新的页面或新的文档或者当前文档中的某个部分。当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。1.我们通过使用a标签在HTML中创建链接。有两种使用a标签的方式:通过使......
  • on duplicate key update的用法
    1.基础用法test表有如下数据执行如下sql会报主键冲突INSERTINTOtest(id,NAME,age)VALUES(1,'张三',13)增加onduplicatekeyupdate后执行成功INSERTINTOtest(id,NAME,age)VALUES(1,'张三',13) ONDUPLICATEKEYUPDATEid=1, NAME='张三', ag......
  • 对矩阵乘以矩阵的转置和矩阵进行奇异值分解得到的向量是一样的。
    w=rand(4,6)[Ud,Sd,Vd]=svds(w/6,4)[Ud1,Sd1,Vd1]=svds(w*w'/6,4)发现Ud和Ud1的向量值是一样的,或者是相反的。  ......
  • 逍遥自在学C语言 | 位运算符<<的高级用法
    前言在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍<<运算符的一些高级用法。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、计算2的整数次幂代码示例#includ......
  • pandas库简单用法总结
    简介pandas 是基于NumPy的一种工具,主要用途是做数据分析,对于初学者,比较常用的就是处理csv或者excel文件DataFrame数据结构DataFrame组成DataFrame是Pandas的重要数据结构之一,也是在使用Pandas进行数据分析过程中最常用的结构之一。DataFrame一个表格型的数据结构,既有......
  • N维整形向量类的c++实现
    题目如下:N维整型向量类【问题描述】线性代数里面我们学习过n维向量,请用类vector_N来封装n维整型向量,成员如下;私有数据成员:² 向量维数n,int型² 指针p,int型公有函数成员:无参默认构造函数,在该函数中,将n置0,将p置null;重载输入输出运算符,输入运算符,先指定向量维数,......
  • Java Stream常见用法汇总,开发效率大幅提升
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~Github地址如果访问不了Github,可以访问gitee地址。gitee地址Java8新......