我有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/