定义六个变量接收加速计x y z和地磁传感器xy z
var ax = 0; var ay = 0; var az = 0; var mx = 0; var my = 0; var mz = 0;
开发平台用的是Apicloud因此,加速计和地磁传感器的参数是通过平台获得的
地磁传感器
function a() { api.startSensor({ type: 'magnetic_field' }, function (ret, err) { if (ret && ret.status) { mx=ret.x my=ret.y mz=ret.z } else { } }); }
function b() { api.startSensor({ type: 'accelerometer' }, function (ret, err) { if (ret && ret.status) { ax = ret.x ay = ret.y az = ret.z } else { } }); }
计算方位角
function c() { var accVals = [ax, ay, az]; var magVals = [mx, my, mz]; ftemp = getYaw(accVals, magVals) * 180.0 / 3.141593; if (ftemp > 0) ftemp = -180.0 (ftemp - 180.0); ftemp = 0.0 - ftemp; ftemp = 90.0; ftemp = -2.0; ///补偿磁偏角,不同的地区会有所不同 if (ftemp > 360.0) { ftemp -= 360.0 }; console.log(ftemp); }
function getYaw(accVals, magVals) { roll = Math.atan2(accVals[0], accVals[2]); pitch = -Math.atan(accVals[1] / (accVals[0] * Math.sin(roll) accVals[2] * Math.sin(roll))); yaw = Math.atan2(magVals[0] * Math.sin(roll) * Math.sin(pitch) magVals[2] * Math.cos(roll) * Math.sin(pitch) magVals[1] * Math.cos(pitch), magVals[0] * Math.cos(roll) - magVals[2] * Math.sin(roll)); return yaw; }