从...开始...
window.addEventListener("deviceorientation", handleDeviceTilt);
function handleDeviceTilt(event){
// Here we can use event.beta, event.gamma
// Note that we don't need event.alpha because that's just the compass as we
// don't need to know which way is north to build a simple bubble-level app
// or similar apps.
}
...在这种情况下beta
,gamma
只要手机或平板电脑与地面平行(比如放在桌子上),这些值就很好用。但是当手机或平板电脑与墙壁平行时,我们无法获得现实的价值。gamma
当设备直立/垂直(即纵向模式)时会变得特别疯狂,这是握住移动设备的最常见方式。
请通过查看此处的立方体来观察 Android 设备的问题
我们需要计算真实角度,以便我们可以在应用程序中准确使用倾斜信息。问题是,
为了解锁所谓的万向节锁,计算
realBeta
和realGamma
(可能通过使用Math.cos()
和 或通过其他方法)之类的真实角度的最简单方法是什么?Math.sin()
这可以在没有矩阵和/或四元数的情况下完成吗?我的猜测是“是”,因为 gamma 中的“失真”在某种程度上与 beta 成正比。如果四元数是唯一的解决方案,那么我们究竟如何获得realGamma
或actualGamma
使用fixedCorrectGamma
它们?
注 1:PlayStore 上有一个水平仪应用程序,可以完美显示设备的真实倾斜角度。所以有证据证明它是可行的。然而,截至 2021 年,似乎没有可用于此类用 javascript 编写的应用程序的开源代码。
注2:这里已经提到了这个问题。
注 3:精度是必需的。我们越接近精确的角度越好。alpha
为简单起见可以省略。
这有什么用?
通过解决这个问题,我们可以deviceorientation
用来制作类似的东西,
...或者例如,我们可以在垂直赛车游戏中使用伽玛来驾驶汽车。
您可以通过在移动设备上访问此处(或通过查找类似内容)来观察实际问题。打开显示 [显示方向角度] 的开关,观察 γ ( gamma
)beta
接近 90 度。还可以查看当您尝试将设备保持在完全直立的位置时 Gyro-Cube 会发生什么。
最后的想法,
我们可能需要一些神秘的数学魔法。