Lingua

SensorManager.GetRotationMatrix Metodo

Definizione

Calcola la matrice <di inclinazione b<>/b> e la matrice <di rotazione b>R</b> trasformando un vettore dal sistema di coordinate del dispositivo al sistema di coordinate del mondo, definito come base ortonormaale diretta, dove:

[Android.Runtime.Register("getRotationMatrix", "([F[F[F[F)Z", "")]
public static bool GetRotationMatrix(float[]? R, float[]? I, float[]? gravity, float[]? geomagnetic);
[<Android.Runtime.Register("getRotationMatrix", "([F[F[F[F)Z", "")>]
static member GetRotationMatrix : single[] * single[] * single[] * single[] -> bool

Parametri

R
Single[]

è una matrice di 9 float che contengono la matrice <di rotazione b>/<b> quando questa funzione restituisce. R può essere null. <p>

I
Single[]

è una matrice di 9 float che contengono la matrice <di rotazione b<>/b> quando questa funzione restituisce. Posso essere null. <p>

gravity
Single[]

è una matrice di 3 float contenenti il vettore di gravità espresso nella coordinata del dispositivo. È possibile usare semplicemente l'oggetto android.hardware.SensorEvent#values values restituito da un android.hardware.Sensor Sensorandroid.hardware.SensorEvent SensorEvent di tipo android.hardware.Sensor#TYPE_ACCELEROMETER TYPE_ACCELEROMETER. <p>

geomagnetic
Single[]

è una matrice di 3 float contenenti il vettore geomagnetico espresso nella coordinata del dispositivo. È possibile usare semplicemente l'oggetto android.hardware.SensorEvent#values values restituito da un android.hardware.Sensor Sensorandroid.hardware.SensorEvent SensorEvent di tipo android.hardware.Sensor#TYPE_MAGNETIC_FIELD TYPE_MAGNETIC_FIELD.

Valori restituiti

true in caso di esito positivo, false in caso di errore (ad esempio, se il dispositivo è in caduta libera). La caduta libera viene definita come condizione quando la grandezza della gravità è minore di 1/10 del valore nominale. In caso di errore, le matrici di output non vengono modificate.

Attributi

Commenti

Calcola la matrice <di inclinazione b<>/b> e la matrice <di rotazione b>R</b> trasformando un vettore dal sistema di coordinate del dispositivo al sistema di coordinate del mondo, definito come base ortonormaale diretta, dove:

<ul><li>X è definito come prodotto vettore <b>Y.Z</b> (è tangente al suolo nella posizione corrente del dispositivo e punta approssimativamente a est).</li li><>Y è tangente al suolo nella posizione corrente del dispositivo e punta verso il polo nord magnetico.</li li><>Z punta verso il cielo ed è perpendicolare al terreno.</li></ul>

<center><img src=".. /.. /.. /images/axis_globe.png" alt="Diagramma del sistema di coordinate globale". border="0" /></center>

<hr>

Per definizione:

[0 0 g] = <b>R</b> * <b>gravità</b> (g = grandezza della gravità)

[0 m 0] = b I/b> * <b>R</b> * <b geomagnetico</b>> (m = grandezza del campo geomagnetico)<><

<b>R</b> è la matrice di identità quando il dispositivo è allineato al sistema di coordinate del mondo, ovvero quando l'asse X del dispositivo punta verso Est, l'asse Y punta al polo nord e il dispositivo si trova di fronte al cielo.

<b>/<b> è una matrice di rotazione che trasforma il vettore geomagnetico nello stesso spazio di coordinate della gravità (lo spazio delle coordinate del mondo). <b/<b>> è una semplice rotazione attorno all'asse X. L'angolo di inclinazione in radianti può essere calcolato con #getInclination. <hr>

Ogni matrice viene restituita come matrice 3x3 o 4x4 row-major a seconda della lunghezza della matrice passata:

<u>Se la lunghezza della matrice è 16:</u>

/  M[ 0]   M[ 1]   M[ 2]   M[ 3]  \
              |  M[ 4]   M[ 5]   M[ 6]   M[ 7]  |
              |  M[ 8]   M[ 9]   M[10]   M[11]  |
              \  M[12]   M[13]   M[14]   M[15]  /

Questa matrice è pronta per l'uso da parte di OpenGL ES.javax.microedition.khronos.opengles.GL10#glLoadMatrixf(float[], int) glLoadMatrixf(float[], int)

Si noti che poiché le matrici OpenGL sono matrici di colonne principali, è necessario trasporre la matrice prima di usarla. Tuttavia, poiché la matrice è una matrice di rotazione, la trasposizione è anche il suo inverso, convenientemente, è spesso l'inverso della rotazione necessaria per il rendering; può quindi essere usato direttamente con OpenGL ES.

Si noti inoltre che le matrici restituite hanno sempre questo formato:

/  M[ 0]   M[ 1]   M[ 2]   0  \
              |  M[ 4]   M[ 5]   M[ 6]   0  |
              |  M[ 8]   M[ 9]   M[10]   0  |
              \      0       0       0   1  /

<u>Se la lunghezza della matrice è 9:</u>

/  M[ 0]   M[ 1]   M[ 2]  \
              |  M[ 3]   M[ 4]   M[ 5]  |
              \  M[ 6]   M[ 7]   M[ 8]  /

<hr>

L'inversa di ogni matrice può essere calcolata facilmente prendendone la trasposizione.

Le matrici restituite da questa funzione sono significative solo quando il dispositivo non cade senza caduta e non è vicino al nord magnetico. Se il dispositivo sta accelerando o inserito in un campo magnetico forte, le matrici restituite potrebbero non essere accurate.

per android.hardware.SensorManager.getRotationMatrix(float[], float[], float[], float[]).

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.

Si applica a

Vedi anche

  • GetInclination(Single[])
  • <xref:Android.Hardware.SensorManager.GetOrientation(System.Single%5b%5d%2c+System.Single%5b%5d)>
  • <xref:Android.Hardware.SensorManager.RemapCoordinateSystem(System.Single%5b%5d%2c+Android.Hardware.Axis%2c+Android.Hardware.Axis%2c+Android.Hardware.Axis)>