我正在开发一款安卓应用程序,需要知道后置摄像头相对于地平线的角度,而不是相对于上一次位置的角度。所有我所阅读的指南针和加速度计的定义都没有提到我是否能够做到这一点。是否有可能实现这个功能?
我正在开发一款安卓应用程序,需要知道后置摄像头相对于地平线的角度,而不是相对于上一次位置的角度。所有我所阅读的指南针和加速度计的定义都没有提到我是否能够做到这一点。是否有可能实现这个功能?
你应该使用加速度计。
思路如下,在静态相机中,唯一作用于相机的力(被加速度计看到)是重力。这应该能够给出哪个方向是“向下”的。然后您需要做的是计算相机面对的方向(这是一个常数,取决于您的加速度计定位的方向)和重力方向之间的角度。
两个向量的点积(http://en.wikipedia.org/wiki/Dot_product)应该给出向量的余弦值(如果两个向量是单位向量),然后使用反余弦函数,您应该能够得到以弧度表示的角度。
由于根据定义,(真正的)地平线距离向下90º(弧度为pi/2),因此您应该从点积的结果中减去pi/2,结果应该在-pi/2和+pi/2之间。
结果为-x意味着相机面朝“向下”并与地平线成x度角。结果为+x意味着相机面朝“向上”并与地平线成x度角。
angle = (float) Math.acos(normalize z value);
在哪里
normalize z value = event.values[2] / Math.sqrt(event.values[0] * event.values[0] + event.values[1] * event.values[1] + event.values[2] * event.values[2])