Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算两个姿势之间的方位角差_Java_Android_Augmented Reality_Arcore - Fatal编程技术网

Java 计算两个姿势之间的方位角差

Java 计算两个姿势之间的方位角差,java,android,augmented-reality,arcore,Java,Android,Augmented Reality,Arcore,我用2表示摄像机的2个位置,我想得到它们方位角之间的差值。 较旧的姿势是从带有较旧相机姿势的锚点集检索的,这样我就不会因为更新ARCore的世界理解而出错。 从当前帧检索较新的姿势 我尝试使用以下公式: 然后我从新角度减去旧角度,但没有成功:当我移动手机仅修改俯仰角度时,得到的结果也会有所不同 我认为它不起作用,因为它假设+Z是垂直轴,而+Y是ARCore中的垂直轴。因此,我旋转公式中的轴,使垂直轴为Y: psi = atan2( 2*(qw*qy + qz*qx), 1-2*(

我用2表示摄像机的2个位置,我想得到它们方位角之间的差值。
较旧的姿势是从带有较旧相机姿势的锚点集检索的,这样我就不会因为更新ARCore的世界理解而出错。
从当前帧检索较新的姿势

我尝试使用以下公式:

然后我从新角度减去旧角度,但没有成功:当我移动手机仅修改俯仰角度时,得到的结果也会有所不同

我认为它不起作用,因为它假设+Z是垂直轴,而+Y是ARCore中的垂直轴。因此,我旋转公式中的轴,使垂直轴为Y:

psi = atan2(
    2*(qw*qy + qz*qx),
    1-2*(qx*qx + qy*qy)
)
它仍然不起作用,当我只改变音高时,结果仍然不同。显然,这不是正确的转变

如何计算相机两个姿势之间的方位角差


这实际上可能是数学堆栈交换的一个问题,但我不确定我是否误解了ARCore或数学,所以这里就是。

使用以下方法计算始终在二维测量的方位角:

public float getAzimuth(PointF aim) {

    float angle = Math.toDegrees(Math.atan2(aim.x - x, aim.y - y));

    // the range of ± 90.0° must be corrected...

    if(angle < 0.0) {
        angle += 360.0;
    }
    return angle;
}
…以及以下计算倾斜度的方法:

float plunge = Math.asin((z2 – z1) / distance)

好的,实际上非常简单。我无法解释为什么我如此确信我需要使用四元数(我实际上成功地使它工作了,但它的效率肯定要低得多)。我现在无法尝试,但我可能会在明天验证它是否有效后接受这个答案。
float distance = Math.sqrt((x2 – x1) / 2.0 + 
                           (y2 – y1) / 2.0 + 
                           (z2 – z1) / 2.0); 
float plunge = Math.asin((z2 – z1) / distance)