在YXZ世界中从旋转矩阵计算ARKit欧拉角

问题描述

我通常需要欧拉角的数学帮助,尤其是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,angle)

旋转顺序是否为:rx ry rz OR ry rz rx可能是从旋转矩阵中提取欧拉角的其他方程式的结果?以及移动动作如何?我们不知道旋转的顺序是什么? (请注意,我在转换矩阵和openGL方面有很深的背景)

我知道atan2是什么意思,我知道r12或column.1.x的y旋转矩阵应该为零:

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

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

在大多数参考文献中都将z-up视为偏航,但是在arkit y-up中,计算的区别是什么?

我只需要了解,我不需要代码即可工作!!如果有人帮助我,我将非常感谢他。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)