Matrix 根据YXZ世界中的旋转矩阵计算ARKit-Calc-euler角

Matrix 根据YXZ世界中的旋转矩阵计算ARKit-Calc-euler角,matrix,camera,rotation,transformation,arkit,Matrix,Camera,Rotation,Transformation,Arkit,我需要欧拉角的数学帮助,特别是ARKit 我查阅了许多有关欧拉角计算的参考资料,但我想知道为什么苹果在其教程中从atan2(r11,r12)计算偏航,如下所示: let yaw = atan2f(camera.transform.columns.0.x, camera.transform.columns.1.x) 例如,如果我需要计算纵摇或横摇,如何计算 我需要理解偏航以及为什么它们不总是依赖于偏航=camera.eularAngle.y 请检查此代码和评论中的问题,我很困惑 // why

我需要欧拉角的数学帮助,特别是ARKit

我查阅了许多有关欧拉角计算的参考资料,但我想知道为什么苹果在其教程中从atan2(r11,r12)计算偏航,如下所示:

let yaw = atan2f(camera.transform.columns.0.x, camera.transform.columns.1.x)
例如,如果我需要计算纵摇或横摇,如何计算

我需要理解偏航以及为什么它们不总是依赖于偏航=camera.eularAngle.y

请检查此代码和评论中的问题,我很困惑

  // why based on this?
            let tilt = abs(camera.eulerAngles.x)
             
            // why * 0.65 or  * 0.75
            let threshold1: Float = .pi / 2 * 0.65
            let threshold2: Float = .pi / 2 * 0.75
             
            // calculate yaw angle
            let yaw = atan2f(camera.transform.columns.0.x, camera.transform.columns.1.x)
          
         
            var angle: Float = 0
            
            switch tilt {
                case 0..<threshold1:
                    angle = camera.eulerAngles.y
                case threshold1..<threshold2:
                    let relativeInRange = abs((tilt - threshold1) / (threshold2 - threshold1))
                    let normalizedY = normalize(camera.eulerAngles.y, forMinimalRotationTo: yaw)
                    angle = normalizedY * (1 - relativeInRange) + yaw * relativeInRange
                default:
                    angle = yaw
            }
        
            self.rotation = SCNVector4(0, 1, 0, angle)

在大多数参考文献中考虑ZUP所以它是偏航,但是在ARKIT-Y-UP中,那么计算有什么不同?? 我只需要理解,我不需要代码来工作!!如果有人帮助我,我将非常感激他

| cos a  0   sin a |
| 0      1   0     |
| -sin a 1   cos a |  
         
          ||

   | r11 r12 r13 |
   | r21 r22 r23 |
   | r31 r32 r33 |