Android 利用方向感測器獲得手機的相對角度

2021-08-31 16:40:06 字數 3780 閱讀 6114

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

1.android 的座標系是如何定義x, y z 軸的。

x軸的方向是沿著螢幕的水平方向從左向右,如果手機不是正方形的話,較短的邊需要水平放置,較長的邊需要垂直放置。

y軸的方向是從螢幕的左下角開始沿著螢幕的的垂直方向指向螢幕的頂端。

將手機放在桌子上,z軸的方向是從手機指向天空。

2.方向感測器

在方向感測器中values變數的3個值都表示度數,它們的含義如下:

values[0]:該值表示方位,也就是手機繞著z軸旋轉的角度。0表示北(north);90表示東(east);180表示南(south);270表示西(west)。如果values[0]的值正好是這4個值,並且手機是水平放置,表示手機的正前方就是這4個方向。可以利用這個特性來實現電子羅盤,例項76將詳細介紹電子羅盤的實現過程。

values[1]:該值表示傾斜度,或手機翹起的程度。當手機繞著x軸傾斜時該值發生變化。values[1]的取值範圍是-180≤values[1]≤180。

假設將手機螢幕朝上水平放在桌子上,這時如果桌子是完全水平的,values[1]的值應該是0(由於很少有桌子是絕對水平的,因此,該值很可能不為0,但一般都是-5和5之間的某個值)。這時從手機頂部開始抬起,直到將手機沿x軸旋轉180度(螢幕向下水平放在桌面上)。在這個旋轉過程中,values[1]會在0到-180之間變化,也就是說,從手機頂部抬起時,values[1]的值會逐漸變小,直到等於-180。如果從手機底部開始抬起,直到將手機沿x軸旋轉180度,這時values[1]會在0到180之間變化。也就是values[1]的值會逐漸增大,直到等於180。可以利用values[1]和下面要介紹的values[2]來測量桌子等物體的傾斜度。

values[2]:表示手機沿著y軸的滾動角度。取值範圍是-90≤values[2]≤90。假設將手機螢幕朝上水平放在桌面上,這時如果桌面是平的,values[2]的值應為0。將手機左側逐漸抬起時,values[2]的值逐漸變小,直到手機垂直於桌面放置,這時values[2]的值是-90。將手機右側逐漸抬起時,values[2]的值逐漸增大,直到手機垂直於桌面放置,這時values[2]的值是90。在垂直位置時繼續向右或向左滾動,values[2]的值會繼續在-90至90之間變化。

下面以乙個例項說明其應用方法

class

sensortest

extends

activity

implements

sensoreventlistener

@override

public

boolean

oncreateoptionsmenu

(menu menu)

@override

protected

void

onpause

() @override

protected

void

onresume

() @override

public

void

onaccuracychanged

(sensor sensor, int accuracy)

@override

public

void

onsensorchanged

(sensorevent event)

//     if (timestamp != 0)

//         timestamp = event.timestamp;

//        

//        

//         vx.settext("x: " + float.tostring(angle[0]));

//         vy.settext("y: " + float.tostring(angle[1]));

//         vz.settext("z: " + float.tostring(angle[2]));

//  方向感測器提供三個資料,分別為azimuth、pitch和roll。

////  azimuth:方位,返回水平時磁北極和y軸的夾角,範圍為0°至360°。

//  0°=北,90°=東,180°=南,270°=西。

////  pitch:x軸和水平面的夾角,範圍為-180°至180°。

//  當z軸向y軸轉動時,角度為正值。

////  roll:y軸和水平面的夾角,由於歷史原因,範圍為-90°至90°。

//  當x軸向z軸移動時,角度為正值。     vx.settext("orientation x: " + event.values[0]);         vy.settext("orientation y: " + event.values[1]);         vz.settext("orientation z: " + event.values[2]);   }}

布局檔案如下:

xmlns:android=""

xmlns:tools=""

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".sensortest"

android:orientation="vertical"    >

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="獲取感測器"        />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/v"

android:textsize="30px">

textview>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/vx"

android:textsize="50px"        />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/vy"

android:textsize="50px"        />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/vz"

android:textsize="50px"        />

linearlayout>

給我老師的人工智慧教程打call!

方向感測器

方向感測器是加速度感測器 gsensor 的廉價替代品,能完成gsensor的一些功能。下面根據網上資料介紹其原理。rohm四方向感測器rpi 1031簡介 工作原理 1.通過光學原理實現 內部有發光二極體乙個,光敏接收三極體兩個 另外有一顆圓柱型的遮光物 如圖所示 對應的電路圖如下 2.通過圓柱型...

方向感測器

方向感測器的使用 sensor sensor sensormanager.getdefaultsensor sensor.type orientation 可以通過以上的方法獲取方向感測器,可以安卓早就廢棄了這個感測器型別,雖然 還是有效的,但已經不再推薦這麼寫了。事實上,android獲取手機旋轉...

Android開發之方向感測器的

android開發之方向感測器的使用 東風破 android中的方向感測器在生活中是乙個很好的應用,典型的例子是指南針的使用,我們先來簡單介紹一下感測器中三個引數x,y,z的含義,以一幅圖來說明。圖 1 補充說明 圖中的座標軸x,y,z和感測器中的x,y,z沒有任何聯絡 如上圖所示,綠色部分表示乙個...