Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Compass heading from deviceorientation
Message
From
25/04/2014 04:55:29
 
 
To
25/04/2014 01:57:10
General information
Forum:
HTML5
Category:
Browser issues
Miscellaneous
Thread ID:
01598938
Message ID:
01599052
Views:
48
>>If you want to look at the site I could give you a URL.....
>
>Yes, send it in PM
>
>Note - this link I gave yesterday http://stackoverflow.com/questions/18112729/calculate-compass-heading-from-deviceorientation-event-api
>
>They test for absolute being true, if not the reading is discarded
>
> if(evt.absolute === true && evt.alpha !== null) {
>    heading = compassHeading(evt.alpha, evt.beta, evt.gamma);
>  }
>
Something seriously awry now :-{

Current code:
var degtorad = Math.PI / 180; // Degree-to-Radian conversion

function compassHeading2(alpha, beta, gamma , absolute) {

    var _x = beta ? beta * degtorad : 0; // beta value
    var _y = gamma ? gamma * degtorad : 0; // gamma value
    var _z = alpha ? alpha * degtorad : 0; // alpha value

    var cX = Math.cos(_x);
    var cY = Math.cos(_y);
    var cZ = Math.cos(_z);
    var sX = Math.sin(_x);
    var sY = Math.sin(_y);
    var sZ = Math.sin(_z);

    // Calculate Vx and Vy components
    var Vx = -cZ * sY - sZ * sX * cY;
    var Vy = -sZ * sY + cZ * sX * cY;

    // Calculate compass heading
    //var compassHeading = Math.atan(Vx / Vy);
     var compassHeading = Math.atan2(Vx ,Vy);

    if (compassHeading < 0) {
        compassHeading += Math.PI + Math.PI;
    };

    return compassHeading * (180 / Math.PI); // Compass Heading (in degrees)
}
Called with:
   var orientationChange = function (data) {
          if (data.absolute === true && data.alpha !== null) {
                lastOrientation = compassHeading2(data.alpha, data.beta, data.gamma, data.absolute);
                  console.log('result: ' + lastOrientation + 'alpha:' + data.alpha + ' beta: ' + data.beta + ' gamma: ' + data.gamma);
           }
    };
Results vary a lot with only minor changes to any of the input values:
result: 7.046408425590759alpha:2.4603574070439738 beta: 0.6170228812798457 gamma: -0.10332701324789607
result: 346.38209648523616alpha:2.4529665255733537 beta: 0.7445035661819629 gamma: 0.14693780311807225
result: 323.7233478510366alpha:2.4845233810017673 beta: 0.833801293904539 gamma: 0.5579781136510195 
result: 329.008299842608alpha:2.4764343283698595 beta: 0.8381191267246367 gamma: 0.4553249133004684 
result: 334.725548494047alpha:2.4684135113669075 beta: 0.8278849276394666 gamma: 0.348097048499672
result: 340.71391817968237alpha:2.461853051087034 beta: 0.8186382448641772 gamma: 0.2475292789778855 
result: 347.15633074038885alpha:2.4561540103590627 beta: 0.8008004917341757 gamma: 0.14678892798674084 
result: 354.4269473034584alpha:2.451044891296479 beta: 0.7906537474295814 gamma: 0.04312349358490233 
result: 1.7843130240315808alpha:2.4428582726856356 beta: 0.7780242913386914 gamma: -0.05750370999075051 
result: 9.100154926831845alpha:2.4387029626060905 beta: 0.775427620358397 gamma: -0.1583050342919901 
result: 359.885344715594alpha:2.4628581134963703 beta: 0.6254340599609843 gamma: -0.025646558918639244 
result: 4.523793658145151alpha:2.596318259831484 beta: 0.5869759139752974 gamma: -0.07331963792916502 
result: 5.763368012442853alpha:2.596818384656943 beta: 0.7196717736453192 gamma: -0.10575804385912449 
result: 12.11694797364695alpha:2.6004789464347144 beta: 0.7852986395008963 gamma: -0.20626720572883836 
result: 5.5265596587107835alpha:2.604506988938409 beta: 0.7266541171534491 gamma: -0.10381731352376557
result: 14.73266921491841alpha:2.602183666809788 beta: 0.7347126347609391 gamma: -0.22932036683207827
Haven't dug into it yet....

UPDATE: Just discovered that if I force beta and gamma to 0 then result is always 0 ???
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform