《Unity》 向量四元数以及常用数学公式

本文详细介绍了Unity中四元数的使用方法及其在旋转操作中的应用,包括Quaternion的各种方法如AngleAxis、FromToRotation等,以及如何通过四元数实现物体的精确旋转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个东西不理解也就算了,每次还都不会使用,烦死了,这次记录一下。
Quaternion.AngleAxis(角度,沿axis轴)方法
返回一个旋转,意义是绕axis轴旋转angle

Quaterion*Quaternion
在lq的旋转状态下进行rq的旋转意义

Unity当中的旋转方向(世界坐标系是左手坐标系)
y: 正是往右边旋转
x: 正是下面旋转
z: 正是往左边旋转

速度*时间=某时移动矢量

为了确保同时按下w和d移动速度不变(因为两个方向的速度矢量肯定最后向量长度会变成根号2),可以把移动向量Normalize化

Vector3.Normalize()
静态方法:使向量的长度为1

Quaternion*Vector3
返回Vector3,意义是让Vector3旋转一个q的角度然后返回新的向量。

Quaternion.FromToRotation(v1,v2)
创建一个从v1到v2的旋转

Mathf.Acos(cos值)
返回弧度

Quaternion.AngleAxis(角度,axis)
绕axis轴旋转angle,创建一个旋转,角度是矢量

q1.RotationTo(q2)
返回一个旋转,目标是让原始旋转q1 能够转向 q2。

q.Right() 以及 q.Foward()
意义跟v.Right(),v.Forward() 是一样的,代表物体当前旋转的right,forward局部方向向量。

q.Inverse()
返回反向的旋转。 沿y正45,反着就是负45了。

transform.right
在想想transform.方向这种东西,代表的是物体的局部right轴或者up轴,在物体什么旋转都没有的时候,当然就代表跟世界的是一样的,例如Vector3.right,当然经过一个矩阵的旋转之后,例如绕y旋转,right轴也会受到影响,自然Vector3.right*旋转矩阵计算出来的新的right轴就是物体的局部right轴。
测试代码。

	float angle = Vector3.Angle(Vector3.right, transform.right);
       // 假设angle 是30度
       angle = 30;
       //Vector3 newV =  Quaternion.AngleAxis(angle,Vector3.up) *Vector3.right;
       //Debug.LogError($"newV:{newV}");
       //transform.right = newV;
       //Vector3 newV = Quaternion.AngleAxis(angle, Vector3.right) * Vector3.right;
       Vector3 newV = Quaternion.AngleAxis(angle, Vector3.right) * Vector3.up;
       Debug.LogError($"newV:{newV}");
       transform.up = newV;

所以其实我想说的是一个代表旋转的最终的旋转四元数*世界轴向量得出来的就是局部轴向量

        Vector3 lRight = transform.rotation.Right();
        Vector3 lForward = transform.rotation.Forward();

        Debug.LogError($"qlRight: {lRight}");
        Debug.LogError($"qlForward: {lForward}");

        lRight = transform.right;
        lForward = transform.forward;
        Debug.LogError($"lRight:{lRight}");
        Debug.LogError($"lForward:{lForward}");

        lRight = transform.rotation * Vector3.right;
        lForward = transform.rotation * Vector3.forward;

        Debug.LogError($"lRight:{lRight}");
        Debug.LogError($"lForward:{lForward}");

速度:每秒xx的单位

帧速:速度/每秒多少帧

Input.GetAxis()的值范围
在这里插入图片描述
鼠标的话范围也许在1-20之间。
左上 正
右下 负
Mouse1 的话按下时1,松开是0

推荐学习文章:
复数是怎么代表角度的:https://www.shuxuele.com/algebra/complex-number-multiply.html , 转化成极坐标,在极坐标数学规律上寻找几何意义
四元数与旋转矩阵 https://openhome.cc/Gossip/WebGL/Quaternion.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustEasyCode

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值