我有2个Pose代表摄像机的2个位置,我想获得它们的方位角之间的差。
较旧的姿势是从具有较旧相机姿势的锚集中检索的,因此我不应该因ARCore对世界的了解而出错。
从当前帧中检索较新的姿势。

我尝试从wikipedia使用此公式:

psi = atan2(
    2*(qw*qz + qx*qy),
    1-2*(qy*qy + qz*qz)
)


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

我认为它没有用,因为它假定+ Z为垂直轴,而+ Y为ARCore中的垂直轴。所以我旋转了公式中的轴,使垂直轴为Y:

psi = atan2(
    2*(qw*qy + qz*qx),
    1-2*(qx*qx + qy*qy)
)


它仍然不起作用,仅当我改变音高时,结果仍然会变化。显然,这不是正确的转换。

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

这实际上可能是Mathematics Stack Exchange的问题,但是我不确定是否误解了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 distance = Math.sqrt((x2 – x1) / 2.0 +
                           (y2 – y1) / 2.0 +
                           (z2 – z1) / 2.0);


...以及以下方法来计算暴跌:

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

关于android - 计算2个姿势之间的方位角差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58008566/

10-12 04:31