陀螺儀屬性介紹和實戰

 

  • 陀螺儀屬性介紹和實戰
    • 什麼是陀螺儀? 
    • 陀螺儀的分類 
    • 陀螺儀的做用 
    • 手機陀螺儀的做用 
    • deviceorientation事件 
    • devicemotion事件 

什麼是陀螺儀?html

陀螺儀又叫角速度傳感器,是不一樣於加速度計(G-sensor)的,他的測量物理量是偏轉、傾斜時的轉動角速度。在手機上,僅用加速度計沒辦法測量或重構出完整的3D動做,測不到轉動的動做的,G-sensor只能檢測軸向的線性動做。但陀螺儀則能夠對轉動、偏轉的動做作很好的測量,這樣就能夠精確分析判斷出使用者的實際動做。然後根據動做,能夠對手機作相應的操做![百度百科]ios

陀螺儀的分類git

  1. 壓電陀螺儀
  2. 微機械陀螺儀
  3. 光纖陀螺儀
  4. 激光陀螺儀

陀螺儀的做用github

  1. 陀螺儀器能提供準確的方位、水平、位置、速度和加速度等信號,以便駕駛員或用自動導航儀來控制飛機、艦船或航天飛機等航行體按必定的航線飛行。
  2. 做爲穩定器,陀螺儀器能使列車在單軌上行駛,能減少船舶在風浪中的搖擺,能使安裝在飛機或衛星上的照相機相對地面穩定等等。
  3. 做爲精密測試儀器,陀螺儀器可以爲地面設施、礦山隧道、地下鐵路、石油鑽探以及導彈發射井等提供準確的方位基準。

手機陀螺儀的做用web

  1. 經過陀螺儀,可以對手機的偏轉角度、速度、時間等進行測量,從而實現對遊戲視野的變化和車輛方向速度的改變,讓遊戲的體驗有了質的提高!
  2. 可以幫助攝像頭進行防抖,通俗來講就是當你按下快門的那一刻,陀螺儀檢測手機抖動的角度,而後根據角度來算出鏡頭模組須要補償的距離,讓鏡頭經過反向運動來抵消手機的抖動,從而實現鏡頭在拍攝的那一刻的絕對靜止,提升成片率。
  3. 輔助GPS導航,在某些gps信號弱或者無信號的地方,好比隧道等,手機就能夠根據以前定位的地點和陀螺儀檢測的運動速度和時間和方向,推算出當前的位置,來達到暫時定位的目的。

deviceorientation事件測試

先來個激發興趣的例子:根據手機旋轉移動而變化的骰子spa

deviceorientation事件:是在加速計檢測到設備方向變化時在window對象上觸發,不過,deviceorientation事件的意圖是告訴開發人員設備在空間中朝向哪兒,而不是如何移動htm

三維空間中xyz三軸定位:對象

  1. x軸方向是從左往右
  2. y軸方向是從下往上
  3. z軸方向是從後往前

爲了方便說明:引入三軸實際旋轉手勢表示圖,通過真機測試,全部軸都是按照逆時針旋轉遊戲

 

事件對象包含的屬性:

  1. alpha:圍繞Z軸旋轉,Y軸的度數差;範圍介於:0-360之間的浮點數
  2. beta:圍繞X軸旋轉,Z軸度數差;範圍介於:-180度-180度之間的浮點數
  3. gamma:圍繞Y軸旋轉,Z軸度數差;範圍介於:-90度-90度之間的浮點數
  4. absolute:布爾值,表示設備是否返回一個絕對值
  5. compassCalibrated:布爾值,表示設備的指南針是否校準過
  6. webkitCompassHeading:與正北方向的角度差值。正北爲0度,正東爲90度,正南爲180度,正西爲270度。由於0度是正北,因此叫指北針,不是指南針
  7. webkitCompassAccuracy:指北針的精確度,表示誤差爲正負多少度。通常是10

指北針實例

手機上的指南針,其實就是指北針,ios端使用alpha角不對,應該使用webkitCompassHeading來得到真實的旋轉角度,真機測試的時候發現使用alpha角,進入界面時候,手機頂部方向對着的方位默認爲正北,這明顯是不對的;安卓端使用alpha是對的,固然也不支持webkitCompassHeading;W3C上還有關於羅盤航向的計算公式等相關信息和資料,對於這個屬性的使用和探索到目前的位置暫時能夠了

devicemotion事件

devicemotion事件-實際例子

devicemotion事件是要告訴開發人員設備何時移動,而不單單是設備方向如何改變。如:檢測設備是否是正在往下掉、檢測設備是否是被走着的人拿在手裏

事件對象包含4個屬性:

  1. acceleration:一個包含x、y、z屬性的對象,在不考慮重力的狀況下,告訴開發者在每一個方向上的加速度
  2. accelerationIncludingGravity:一個包含x、y、z屬性的對象,在考慮z軸天然重力加速度的狀況下,告訴開發者每一個方向上的加速度
  3. interval:以毫秒錶示的時間值,必須在另外一個devicemotion事件觸發前傳入。這個值在每一個事件是一個常量
  4. rotationRate:一個包含表示方向的alpha、beta、gamma屬性的對象

搖一搖實際例子:

<script>

if (window.DeviceMotionEvent) {

    window.addEventListener('devicemotion', deviceMotionHandler, false);

}

var speed = 30; //speed

var x = y = z = lastX = lastY = lastZ = 0;

 

function deviceMotionHandler(eventData) {

    var acceleration = eventData.accelerationIncludingGravity;

    x = acceleration.x;

    y = acceleration.y;

    z = acceleration.z;

    if (Math.abs(x - lastX) > speed || Math.abs(y - lastY) > speed || Math.abs(z - lastZ) > speed) {

        //簡單的搖一搖觸發代碼

        alert('搖一搖成功');

    }

    lastX = x;

    lastY = y;

    lastZ = z;

}

</script>

說明:當xyz任意方向上的加速大大於30(任意設置,設置大一點能治肩周炎,哈哈)的時候,觸發成功

相關文章
相關標籤/搜索