我有 2 個(gè)Pose代表相機(jī)的 2 個(gè)位置,我想得到它們的方位角之間的差異。舊的姿勢是從具有舊相機(jī)姿勢的錨點(diǎn)集中檢索的,因此我不應(yīng)該從 ARCore 的世界理解更新中得到錯(cuò)誤。從當(dāng)前幀中檢索新的姿勢。我嘗試使用這個(gè)公式:psi?=?atan2(
????2*(qw*qz?+?qx*qy),
????????1-2*(qy*qy?+?qz*qz)
)然后我從新角度中減去舊角度,但沒有成功:當(dāng)我移動(dòng)手機(jī)僅修改俯仰角度時(shí),我得到的結(jié)果也會有所不同。我認(rèn)為它不起作用,因?yàn)樗僭O(shè) +Z 是垂直軸,而 +Y 是 ARCore 中的垂直軸。所以我旋轉(zhuǎn)了公式中的軸,使垂直軸為 Y :psi?=?atan2(
????2*(qw*qy?+?qz*qx),
????????1-2*(qx*qx?+?qy*qy)
)它仍然不起作用,當(dāng)我僅改變音調(diào)時(shí),結(jié)果仍然不同。顯然這不是正確的轉(zhuǎn)變。如何計(jì)算相機(jī)兩個(gè)姿勢之間的方位角差異?這實(shí)際上可能是 Mathematics Stack Exchange 的一個(gè)問題,但我不確定我是否誤解了 ARCore 或數(shù)學(xué),所以就在這里。
1 回答

FFIVE
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用以下方法計(jì)算始終以二維測量的方位角:
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;
}
...以下計(jì)算距離的方法:
float distance = Math.sqrt((x2 – x1) / 2.0 +
(y2 – y1) / 2.0 +
(z2 – z1) / 2.0);
...以及以下計(jì)算暴跌的方法:
float plunge = Math.asin((z2 – z1) / distance)
添加回答
舉報(bào)
0/150
提交
取消