Cal*_*nca 11 matrix augmented-reality scenekit swift arkit
在我的项目中,我有一个变换,我想在eulersAngles.
如何从 Swift 语言中x矩阵eulerAngles的变换中获得?44
我至少需要Pitch,我可能需要Yaw,我可能需要Roll。
接受的答案对我不起作用。最终,我设法找到了解决方案,这是一个简单的计算扩展:
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 对其进行了测试。
假设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
与四元数相反,在某些极端情况(万向节锁)下,您必须担心上述解决方案处理得很好。
| 归档时间: |
|
| 查看次数: |
5785 次 |
| 最近记录: |