SensorManager.GetRotationMatrix Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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)>