问题描述
我通常需要欧拉角的数学帮助,尤其是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 (将#修改为@)