Java 计算两个姿势之间的方位角差
我用2表示摄像机的2个位置,我想得到它们方位角之间的差值。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*(
较旧的姿势是从带有较旧相机姿势的锚点集检索的,这样我就不会因为更新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)