Unity的Inertial Tensor 和 Inertial Tensor Rotation 与 惯性张量的转换

惯性张量是一3*3的矩阵,如图所示 

在Unity的Rigidbody组件中为了减少变量的数目,简化为用Inertial Tensor(3个变量,三维向量)和Inertial Tensor Rotation(4个变量,四元数)来表示,

从Inertial Tensor和Inertial Tensor Rotation转换到惯性张量(取最终结果InertiaTensor的前三行前三列)的代码如下:

public Rigidbody rigidbody;
private void Start()
{
Vector3 Inertia = rigidbody.inertiaTensorRotation * new Vector3(rigidbody.inertiaTensor.x > 0 ? rigidbody.inertiaTensor.x : 0,rigidbody.inertiaTensor.y > 0 ? rigidbody.inertiaTensor.y : 0,rigidbody.inertiaTensor.z > 0 ? rigidbody.inertiaTensor.z : 0);
Matrix4x4 InertiaTensor= Matrix4x4.zero;
Matrix4x4 r = Matrix4x4.Rotate(rigidbody.rotation);
InertiaTensor[0, 0] = Inertia.x;
InertiaTensor[1, 1] = Inertia.y;
InertiaTensor[2, 2] = Inertia.z;
InertiaTensor[3, 3] = 1;
InertiaTensor = r * InertiaTensor * r.transpose;
Debug.Log(InertiaTensor);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值