Unity中四元数与欧拉角的互相转换

Unity中有相应的api,单纯只是学习一下原理

 Quaternion ToQuaternion(Vector3 v)
    {
        Quaternion q = new Quaternion();
        float yaw = v.z * 0.5f * Mathf.Deg2Rad;
        float pitch = v.y * 0.5f * Mathf.Deg2Rad;
        float roll = v.x * 0.5f * Mathf.Deg2Rad;
        float cy = Mathf.Cos(yaw);
        float sy = Mathf.Sin(yaw);
        float cp = Mathf.Cos(pitch);
        float sp = Mathf.Sin(pitch);
        float cr = Mathf.Cos(roll);
        float sr = Mathf.Sin(roll);

        q.x = cy * cp * sr + sy * sp * cr;
        q.y = cy * sp * cr - sy * cp * sr;
        q.z = sy * cp * cr - cy * sp * sr;
        q.w = cy * cp * cr + sy * sp * sr;
        return q;
    }

    Vector3 ToEuler(Quaternion q)
    {
        Vector3 v = Vector3.zero;
        v.y = Mathf.Atan2(2 * (q.x * q.z + q.w * q.y), (q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)) * Mathf.Rad2Deg;
        v.x = Mathf.Asin(2 * (q.w * q.x - q.y * q.z)) * Mathf.Rad2Deg;
        v.z = Mathf.Atan2(2 * (q.x * q.y + q.w * q.z), q.w * q.w + q.y * q.y - q.x * q.x - q.z * q.z) * Mathf.Rad2Deg;
        if (v.x < 0) v.x += 360;
        if (v.y < 0) v.y += 360;
        if (v.z < 0) v.z += 360;
        return v;
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值