ARKit – eulerAngles 变换矩阵 4x4

Cal*_*nca 11 matrix augmented-reality scenekit swift arkit

在我的项目中,我有一个变换,我想在eulersAngles.

如何从 Swift 语言中x矩阵eulerAngles的变换中获得?44

我至少需要Pitch,我可能需要Yaw,我可能需要Roll

Mic*_*kiy 8

接受的答案对我不起作用。最终,我设法找到了解决方案,这是一个简单的计算扩展:

extension simd_float4x4 {
    var eulerAngles: simd_float3 {
        simd_float3(
            x: asin(-self[2][1]),
            y: atan2(self[2][0], self[2][2]),
            z: atan2(self[0][1], self[1][1])
        )
    }
}

Run Code Online (Sandbox Code Playgroud)

我通过比较 Apple 提供的默认 ARFrame.camera.eulerAngles 和使用扩展计算的 ARFrmae.camera.transform.eulerAngles 对其进行了测试。


pj_*_*ukh 2

假设mij是第i行j列的矩阵元素。

R=atan2(m12, m22)
c2 = sqrt(m00^2 + m01^2)
P = atan2(-m02, c2)
s1 = sin(R), c1 = cos(R)
Y = atan2(s1*m20 - c1*m10, c1*m11-s1*m21)
Run Code Online (Sandbox Code Playgroud)

资料来源:本文档中对数学的描述非常好:https://pdfs.semanticscholar.org/6681/37fa4b875d890f446e689eea1e334bcf6bf6.pdf

与四元数相反,在某些极端情况(万向节锁)下,您必须担心上述解决方案处理得很好。