【发布时间】:2018-04-06 15:47:37
【问题描述】:
我正在制作 AR 移动网络应用,我目前的目标是在相机屏幕上显示一些事件。例如,如果我的北方方向有火,我想将手机指向北方,那里应该可以看到火的标志。
我的问题是 - 我怎样才能得到绝对罗盘数据?
我试过这段 JavaScript 代码:
function compassHeading(alpha, beta, gamma) {
var dataContainerMotion = document.getElementById('dataContainerMotion');
// Convert degrees to radians
var alphaRad = alpha * (Math.PI / 180);
var betaRad = beta * (Math.PI / 180);
var gammaRad = gamma * (Math.PI / 180);
// Calculate equation components
var cA = Math.cos(alphaRad);
var sA = Math.sin(alphaRad);
var cB = Math.cos(betaRad);
var sB = Math.sin(betaRad);
var cG = Math.cos(gammaRad);
var sG = Math.sin(gammaRad);
// Calculate A, B, C rotation components
var rA = - cA * sG - sA * sB * cG;
var rB = - sA * sG + cA * sB * cG;
var rC = - cB * cG;
// Calculate compass heading
var compassHeading = Math.atan(rA / rB);
// Convert from half unit circle to whole unit circle
if(rB < 0) {
compassHeading += Math.PI;
}else if(rA < 0) {
compassHeading += 2 * Math.PI;
}
// Convert radians to degrees
compassHeading *= 180 / Math.PI;
return compassHeading;
}
window.addEventListener('deviceorientation', function(evt) {
heading = compassHeading(alpha, beta, gamma);
dataContainerMotion.innerHTML = heading;
}, false);
但变量 absolute 显示为 false,我无法获得绝对值。指南针是根据页面初始化时手机的定位进行校准的,而不是根据地球上北方的实际位置。
如果能提供任何帮助,我将不胜感激 - 我被困在这里,如果不获取指南针数据,我将无法继续前进。
【问题讨论】:
标签: javascript html geolocation compass motion