Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I dispositivi dispongono di tutti i tipi di sensori disponibili per l'utente. Alcuni sensori possono rilevare il movimento, altri cambiamenti nell'ambiente, ad esempio la luce. Il monitoraggio e la reazione a questi sensori rendono dinamica l'app adattandosi al modo in cui viene usato il dispositivo. È anche possibile rispondere alle modifiche nei sensori e avvisare l'utente. Questo articolo offre una breve panoramica dei sensori comuni supportati dall'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI).
I tipi correlati al sensore del dispositivo sono disponibili nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Velocità del sensore
La velocità del sensore imposta la velocità in cui un sensore restituirà i dati all'app. Quando si avvia un sensore, si specifica la velocità desiderata del sensore con l'enumerazione SensorSpeed :
Fastest
Ottenere i dati del sensore il più velocemente possibile (non è garantito il ritorno sul thread dell'interfaccia utente).Game
Tariffa adatta per i giochi (non è garantito il ritorno sul thread dell'interfaccia utente).UI
Frequenza adatta per l'interfaccia utente generale.Default
Frequenza predefinita adatta alle modifiche dell'orientamento dello schermo.
Avviso
Il monitoraggio di troppi sensori contemporaneamente può influire sui dati del sensore di frequenza restituiti all'app.
In .NET 8 gli SensorSpeed intervalli sono identici in tutte le piattaforme:
- Default utilizza un intervallo di 200 ms.
- UI usa un intervallo di 60 ms.
- Game utilizza un intervallo di 20 ms.
- Fastest utilizza un intervallo di 5 ms.
Gestori eventi del sensore
I gestori eventi aggiunti ai sensori con velocità Game o Fastest non sono garantiti per l'esecuzione nel thread dell'interfaccia utente. Se il gestore eventi deve accedere agli elementi dell'interfaccia utente, usare il MainThread.BeginInvokeOnMainThread
metodo per eseguire tale codice nel thread dell'interfaccia utente.
Accelerometer
Il sensore dell'accelerometro misura l'accelerazione del dispositivo lungo i tre assi. I dati segnalati dal sensore rappresentano il modo in cui l'utente sta spostando il dispositivo.
L'interfaccia IAccelerometer fornisce l'accesso al sensore ed è disponibile tramite la Accelerometer.Default proprietà . Sia l'interfaccia che Accelerometer
la IAccelerometer
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Introduzione
Per accedere alla funzionalità dell'accelerometro, potrebbe essere necessaria la configurazione specifica della piattaforma seguente:
Se l'app è destinata a Android 12+ (API 31+), il sistema posiziona un limite di 200 Hz sulla frequenza di aggiornamento dei dati da questo sensore. Se l'app deve raccogliere i dati del sensore usando la velocità del Fastest sensore, devi dichiarare l'autorizzazione HIGH_SAMPLING_RATE_SENSORS
. È possibile configurare l'autorizzazione nei modi seguenti:
Aggiungere l'autorizzazione basata su assembly:
Aprire il file Platforms/Android/MainApplication.cs e aggiungere l'attributo assembly seguente dopo
using
le direttive:[assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
- oppure -
Aggiornare il manifesto Android:
Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere la riga seguente nel
manifest
nodo:<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
- oppure -
Aggiornare il manifesto Android nell'editor del manifesto:
In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare l'autorizzazione HIGH_SAMPLING_RATE_edizione Standard NSORS. Il file AndroidManifest.xml verrà aggiornato automaticamente.
Nota
Se un utente disattiva l'accesso al microfono usando gli interruttori del dispositivo, i sensori di movimento e posizione sono sempre limitati a velocità, indipendentemente dal fatto che l'utente dichiari l'autorizzazioneHIGH_SAMPLING_RATE_SENSORS
.
Monitorare il sensore dell'accelerometro
Per avviare il monitoraggio del sensore dell'accelerometro, chiamare il IAccelerometer.Start metodo . .NET MAUI invia modifiche ai dati dell'accelerometro all'app generando l'evento IAccelerometer.ReadingChanged . Usare il IAccelerometer.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio dell'accelerometro con la IAccelerometer.IsMonitoring proprietà , che sarà true
se l'accelerometro è stato avviato ed è attualmente monitorato.
L'esempio di codice seguente illustra il monitoraggio dell'accelerometro per le modifiche:
public void ToggleAccelerometer()
{
if (Accelerometer.Default.IsSupported)
{
if (!Accelerometer.Default.IsMonitoring)
{
// Turn on accelerometer
Accelerometer.Default.ReadingChanged += Accelerometer_ReadingChanged;
Accelerometer.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off accelerometer
Accelerometer.Default.Stop();
Accelerometer.Default.ReadingChanged -= Accelerometer_ReadingChanged;
}
}
}
private void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
{
// Update UI Label with accelerometer state
AccelLabel.TextColor = Colors.Green;
AccelLabel.Text = $"Accel: {e.Reading}";
}
Le letture dell'accelerometro vengono segnalate in G. Un G è un'unità di forza di gravitazione uguale alla gravità esercitata dal campo gravitazionale della terra $(9,81 m/s^2)$.
Il sistema di coordinate viene definito in relazione allo schermo del dispositivo nell'orientamento predefinito. Gli assi non vengono scambiati quando cambia l'orientamento dello schermo del dispositivo.
L'asse X è orizzontale e punta a destra, l'asse Y è verticale e punta verso l'alto e l'asse Z punta verso l'esterno della faccia anteriore dello schermo. In questo sistema, le coordinate dietro lo schermo hanno valori Z negativi.
Esempi:
Quando il dispositivo si trova piatto su una tabella e viene spostato sul lato sinistro verso destra, il valore di accelerazione X è positivo.
Quando il dispositivo si trova piatto su una tabella, il valore di accelerazione è +1,00 G o $(+9,81 m/s^2)$, che corrisponde all'accelerazione del dispositivo $(0 m/s^2)$ meno la forza di gravità $(-9,81 m/s^2)$ e normalizzata come in G.
Quando il dispositivo si trova piatto su un tavolo e viene spinto verso il cielo con un'accelerazione di A $m/s^2$, il valore di accelerazione è uguale a $A+9,81$ che corrisponde all'accelerazione del dispositivo $(+A m/s^2)$ meno la forza di gravità $(-9,81 m/s^2)$ e normalizzata in G.
Informazioni specifiche della piattaforma (Accelerometro)
Non sono presenti informazioni specifiche della piattaforma correlate al sensore dell'accelerometro.
Barometer
Il sensore barometro misura la pressione dell'aria ambientale. I dati segnalati dal sensore rappresentano la pressione dell'aria corrente. Questi dati vengono segnalati la prima volta che si avvia il monitoraggio del sensore e quindi ogni volta che cambia la pressione.
L'interfaccia IBarometer fornisce l'accesso al sensore ed è disponibile tramite la Barometer.Default proprietà . Sia l'interfaccia che Barometer
la IBarometer
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Per avviare il monitoraggio del sensore barometro, chiamare il IBarometer.Start metodo . .NET MAUI invia letture di pressione atmosferica all'app generando l'evento IBarometer.ReadingChanged . Usare il IBarometer.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio del barometro con la IBarometer.IsMonitoring proprietà , che sarà true
se il barometro è attualmente monitorato.
La lettura della pressione è rappresentata in ectopascali.
L'esempio di codice seguente illustra il monitoraggio del barometro per le modifiche:
public void ToggleBarometer()
{
if (Barometer.Default.IsSupported)
{
if (!Barometer.Default.IsMonitoring)
{
// Turn on barometer
Barometer.Default.ReadingChanged += Barometer_ReadingChanged;
Barometer.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off barometer
Barometer.Default.Stop();
Barometer.Default.ReadingChanged -= Barometer_ReadingChanged;
}
}
}
private void Barometer_ReadingChanged(object sender, BarometerChangedEventArgs e)
{
// Update UI Label with barometer state
BarometerLabel.TextColor = Colors.Green;
BarometerLabel.Text = $"Barometer: {e.Reading}";
}
Informazioni specifiche della piattaforma (Barometer)
Questa sezione descrive i dettagli di implementazione specifici della piattaforma correlati al sensore barometro.
Nessun dettaglio di implementazione specifico della piattaforma.
Compass
Il sensore bussola monitora la direzione magnetica del dispositivo verso nord.
L'interfaccia ICompass fornisce l'accesso al sensore ed è disponibile tramite la Compass.Default proprietà . Sia l'interfaccia che Compass
la ICompass
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Per avviare il monitoraggio del sensore bussola, chiamare il ICompass.Start metodo . .NET MAUI genera l'evento quando cambia l'intestazione ICompass.ReadingChanged della bussola. Usare il ICompass.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio della bussola con la ICompass.IsMonitoring proprietà , che sarà true
se la bussola è attualmente monitorata.
L'esempio di codice seguente illustra il monitoraggio della bussola per le modifiche:
private void ToggleCompass()
{
if (Compass.Default.IsSupported)
{
if (!Compass.Default.IsMonitoring)
{
// Turn on compass
Compass.Default.ReadingChanged += Compass_ReadingChanged;
Compass.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off compass
Compass.Default.Stop();
Compass.Default.ReadingChanged -= Compass_ReadingChanged;
}
}
}
private void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
// Update UI Label with compass state
CompassLabel.TextColor = Colors.Green;
CompassLabel.Text = $"Compass: {e.Reading}";
}
Informazioni specifiche della piattaforma (Bussola)
Questa sezione descrive i dettagli di implementazione specifici della piattaforma correlati alla funzionalità bussola.
Android non fornisce un'API per il recupero dell'intestazione della bussola. .NET MAUI usa i sensori accelerometro e magnetometro per calcolare la direzione nord magnetica, consigliata da Google.
In rari casi, è possibile che vengano visualizzati risultati incoerenti perché i sensori devono essere calibrati. La ricalibrazione della bussola in Android varia in base al modello telefonico e alla versione di Android. Dovrai cercare in Internet come ricalibrare la bussola. Ecco due collegamenti che possono aiutare a ricalibrare la bussola:
- Google Help Center: Trovare e migliorare l'accuratezza della posizione
- Stack Exchange Android Enthusiasts: Come posso calibrare la bussola sul mio telefono?
L'esecuzione di più sensori dall'app contemporaneamente può compromettere la velocità del sensore.
Filtro a basso consumo
A causa del modo in cui i valori della bussola Android vengono aggiornati e calcolati, potrebbe essere necessario uniformare i valori. È possibile applicare un filtro Lowpass che calcola la media dei valori seno e coseno degli angoli e può essere attivato usando l'overload del Start
metodo , che accetta il bool applyLowPassFilter
parametro :
Compass.Default.Start(SensorSpeed.UI, applyLowPassFilter: true);
Questa operazione viene applicata solo alla piattaforma Android e il parametro viene ignorato in iOS e Windows. Per altre informazioni, vedere questo commento sul problema di GitHub.
Scuotere
Anche se questo articolo elenca lo shake come sensore, non lo è. L'accelerometro viene usato per rilevare quando il dispositivo viene scosso.
L'interfaccia IAccelerometer fornisce l'accesso al sensore ed è disponibile tramite la Accelerometer.Default proprietà . Sia l'interfaccia che Accelerometer
la IAccelerometer
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Nota
Se l'app deve raccogliere i dati del sensore accelerometro usando la velocità del Fastest sensore, devi dichiarare l'autorizzazione HIGH_SAMPLING_RATE_SENSORS
. Per altre informazioni, vedere Accelerometer.
L'API di rilevamento scuotimento calcola l'accelerazione usando letture non elaborate dell'accelerometro. Usa un semplice meccanismo di inserimento in coda per rilevare se i 3/4 dei recenti eventi dell'accelerometro si sono verificati nell'ultimo mezzo secondo. L'accelerazione viene calcolata aggiungendo il quadrato delle letture X, Y e Z ($x^2+y^2+z^2$) dall'accelerometro e confrontandolo con una soglia specifica.
Per avviare il monitoraggio del sensore dell'accelerometro, chiamare il IAccelerometer.Start metodo . Quando viene rilevato uno shake, viene generato l'evento IAccelerometer.ShakeDetected . Usare il IAccelerometer.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio dell'accelerometro con la IAccelerometer.IsMonitoring
proprietà , che sarà true
se l'accelerometro è stato avviato ed è attualmente monitorato.
È consigliabile usare Game o più velocemente per .SensorSpeed
L'esempio di codice seguente illustra il monitoraggio dell'accelerometro per l'evento ShakeDetected
:
private void ToggleShake()
{
if (Accelerometer.Default.IsSupported)
{
if (!Accelerometer.Default.IsMonitoring)
{
// Turn on accelerometer
Accelerometer.Default.ShakeDetected += Accelerometer_ShakeDetected;
Accelerometer.Default.Start(SensorSpeed.Game);
}
else
{
// Turn off accelerometer
Accelerometer.Default.Stop();
Accelerometer.Default.ShakeDetected -= Accelerometer_ShakeDetected;
}
}
}
private void Accelerometer_ShakeDetected(object sender, EventArgs e)
{
// Update UI Label with a "shaked detected" notice, in a randomized color
ShakeLabel.TextColor = new Color(Random.Shared.Next(256), Random.Shared.Next(256), Random.Shared.Next(256));
ShakeLabel.Text = $"Shake detected";
}
Informazioni specifiche della piattaforma (Shake)
Non sono presenti informazioni specifiche della piattaforma correlate al sensore dell'accelerometro.
Giroscopio
Il sensore giroscopio misura la velocità di rotazione angolare intorno ai tre assi primari del dispositivo.
L'interfaccia IGyroscope fornisce l'accesso al sensore ed è disponibile tramite la Gyroscope.Default proprietà . Sia l'interfaccia che Gyroscope
la IGyroscope
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Introduzione
Per accedere alla funzionalità giroscopio, potrebbe essere necessaria la configurazione specifica della piattaforma seguente:
Se l'app è destinata a Android 12+ (API 31+), il sistema posiziona un limite di 200 Hz sulla frequenza di aggiornamento dei dati da questo sensore. Se l'app deve raccogliere i dati del sensore usando la velocità del Fastest sensore, devi dichiarare l'autorizzazione HIGH_SAMPLING_RATE_SENSORS
. È possibile configurare l'autorizzazione nei modi seguenti:
Aggiungere l'autorizzazione basata su assembly:
Aprire il file Platforms/Android/MainApplication.cs e aggiungere l'attributo assembly seguente dopo
using
le direttive:[assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
- oppure -
Aggiornare il manifesto Android:
Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere la riga seguente nel
manifest
nodo:<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
- oppure -
Aggiornare il manifesto Android nell'editor del manifesto:
In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare l'autorizzazione HIGH_SAMPLING_RATE_edizione Standard NSORS. Il file AndroidManifest.xml verrà aggiornato automaticamente.
Nota
Se un utente disattiva l'accesso al microfono usando gli interruttori del dispositivo, i sensori di movimento e posizione sono sempre limitati a velocità, indipendentemente dal fatto che l'utente dichiari l'autorizzazioneHIGH_SAMPLING_RATE_SENSORS
.
Monitorare il sensore giroscopio
Per avviare il monitoraggio del sensore giroscopio, chiamare il IGyroscope.Start metodo . .NET MAUI invia modifiche ai dati del giroscopio all'app generando l'evento IGyroscope.ReadingChanged . I dati forniti da questo evento vengono misurati in rad/s (radiante al secondo). Usare il IGyroscope.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio del giroscopio con la IGyroscope.IsMonitoring proprietà , che sarà true
se il giroscopio è stato avviato ed è attualmente monitorato.
L'esempio di codice seguente illustra il monitoraggio del giroscopio:
private void ToggleGyroscope()
{
if (Gyroscope.Default.IsSupported)
{
if (!Gyroscope.Default.IsMonitoring)
{
// Turn on gyroscope
Gyroscope.Default.ReadingChanged += Gyroscope_ReadingChanged;
Gyroscope.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off gyroscope
Gyroscope.Default.Stop();
Gyroscope.Default.ReadingChanged -= Gyroscope_ReadingChanged;
}
}
}
private void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
// Update UI Label with gyroscope state
GyroscopeLabel.TextColor = Colors.Green;
GyroscopeLabel.Text = $"Gyroscope: {e.Reading}";
}
Informazioni specifiche della piattaforma (Giroscopio)
Non sono presenti informazioni specifiche della piattaforma relative al sensore giroscopio.
Magnetometer
Il sensore magnetometro indica l'orientamento del dispositivo rispetto al campo magnetico terrestre.
L'interfaccia IMagnetometer fornisce l'accesso al sensore ed è disponibile tramite la Magnetometer.Default proprietà . Sia l'interfaccia che Magnetometer
la IMagnetometer
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Introduzione
Per accedere alla funzionalità magnetometro, potrebbe essere necessaria la configurazione specifica della piattaforma seguente:
Se l'app è destinata a Android 12+ (API 31+), il sistema posiziona un limite di 200 Hz sulla frequenza di aggiornamento dei dati da questo sensore. Se l'app deve raccogliere i dati del sensore usando la velocità del Fastest sensore, devi dichiarare l'autorizzazione HIGH_SAMPLING_RATE_SENSORS
. È possibile configurare l'autorizzazione nei modi seguenti:
Aggiungere l'autorizzazione basata su assembly:
Aprire il file Platforms/Android/MainApplication.cs e aggiungere l'attributo assembly seguente dopo
using
le direttive:[assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
- oppure -
Aggiornare il manifesto Android:
Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere la riga seguente nel
manifest
nodo:<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
- oppure -
Aggiornare il manifesto Android nell'editor del manifesto:
In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare l'autorizzazione HIGH_SAMPLING_RATE_edizione Standard NSORS. Il file AndroidManifest.xml verrà aggiornato automaticamente.
Nota
Se un utente disattiva l'accesso al microfono usando gli interruttori del dispositivo, i sensori di movimento e posizione sono sempre limitati a velocità, indipendentemente dal fatto che l'utente dichiari l'autorizzazioneHIGH_SAMPLING_RATE_SENSORS
.
Monitorare il sensore magnetometro
Per avviare il monitoraggio del sensore magnetometro, chiamare il IMagnetometer.Start metodo . .NET MAUI invia modifiche ai dati del magnetometro all'app generando l'evento IMagnetometer.ReadingChanged . I dati forniti da questo evento vengono misurati in $μT$ (microteslas). Usare il IMagnetometer.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio del magnetometro con la IMagnetometer.IsMonitoring proprietà , che sarà true
se il magnetometro è stato avviato ed è attualmente monitorato.
L'esempio di codice seguente illustra il monitoraggio del magnetometro:
private void ToggleMagnetometer()
{
if (Magnetometer.Default.IsSupported)
{
if (!Magnetometer.Default.IsMonitoring)
{
// Turn on magnetometer
Magnetometer.Default.ReadingChanged += Magnetometer_ReadingChanged;
Magnetometer.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off magnetometer
Magnetometer.Default.Stop();
Magnetometer.Default.ReadingChanged -= Magnetometer_ReadingChanged;
}
}
}
private void Magnetometer_ReadingChanged(object sender, MagnetometerChangedEventArgs e)
{
// Update UI Label with magnetometer state
MagnetometerLabel.TextColor = Colors.Green;
MagnetometerLabel.Text = $"Magnetometer: {e.Reading}";
}
Informazioni specifiche della piattaforma (Magnetometro)
Non sono presenti informazioni specifiche della piattaforma relative al sensore magnetometro.
Orientamento
Il sensore di orientamento monitora l'orientamento di un dispositivo nello spazio 3D.
Nota
Questo sensore non viene usato per determinare se la visualizzazione video del dispositivo è in modalità verticale o orizzontale. Utilizzare in alternativa la proprietà DeviceDisplay.Current.MainDisplayInfo.Orientation
. Per altre informazioni, vedere Informazioni sulla visualizzazione del dispositivo.
L'interfaccia IOrientationSensor fornisce l'accesso al sensore ed è disponibile tramite la OrientationSensor.Default proprietà . Sia l'interfaccia che OrientationSensor
la IOrientationSensor
classe sono contenute nello spazio dei Microsoft.Maui.Devices.Sensors
nomi .
Per avviare il monitoraggio del sensore di orientamento, chiamare il IOrientationSensor.Start metodo . .NET MAUI invia modifiche ai dati di orientamento all'app generando l'evento IOrientationSensor.ReadingChanged . Usare il IOrientationSensor.Stop metodo per arrestare il monitoraggio del sensore. È possibile rilevare lo stato di monitoraggio dell'orientamento con la IOrientationSensor.IsMonitoring proprietà , che sarà true
se l'orientamento è stato avviato ed è attualmente monitorato.
L'esempio di codice seguente illustra il monitoraggio del sensore di orientamento:
private void ToggleOrientation()
{
if (OrientationSensor.Default.IsSupported)
{
if (!OrientationSensor.Default.IsMonitoring)
{
// Turn on orientation
OrientationSensor.Default.ReadingChanged += Orientation_ReadingChanged;
OrientationSensor.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off orientation
OrientationSensor.Default.Stop();
OrientationSensor.Default.ReadingChanged -= Orientation_ReadingChanged;
}
}
}
private void Orientation_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
// Update UI Label with orientation state
OrientationLabel.TextColor = Colors.Green;
OrientationLabel.Text = $"Orientation: {e.Reading}";
}
Le letture di IOrientationSensor
vengono restituite in forma di Quaternion che descrive l'orientamento del dispositivo in base a due sistemi di coordinate 3D:
Il dispositivo (in genere un telefono o tablet) usa un sistema di coordinate 3D con gli assi seguenti:
- L'asse X positivo punta a destra dello schermo in modalità verticale.
- L'asse Y positivo punta alla parte superiore del dispositivo in modalità verticale.
- L'asse Z positivo punta fuori dallo schermo.
Il sistema di coordinate 3D della terra usa gli assi seguenti:
- L'asse X positivo è tangente alla superficie della Terra e punta a est.
- L'asse Y positivo è anche tangente alla superficie della Terra e punta a nord.
- L'asse Z positivo è perpendicolare alla superficie della Terra e punta verso l'alto.
Quaternion
descrive la rotazione del sistema di coordinate del dispositivo rispetto al sistema di coordinate della terra.
Un Quaternion
valore è strettamente correlato alla rotazione attorno a un asse. Se un asse di rotazione è il vettore normalizzato ($a_x, a_y, a_z$) e l'angolo di rotazione è $\theta$, i componenti (X, Y, Z, W) del quaternione sono:
$(a_x \times \sin(\theta/2), a_y \times \sin(\theta/2), a_z \times \sin(\theta/2), \cos(\theta/2))$
Questi sono i sistemi di coordinate di destra, quindi con il pollice della mano destra puntato nella direzione positiva dell'asse di rotazione, la curva delle dita indica la direzione di rotazione per gli angoli positivi.
Esempi:
Quando il dispositivo è appoggiato su un piano con lo schermo rivolto verso l'alto, con la parte superiore del dispositivo (in modalità verticale) orientata a nord, i due sistemi di coordinate sono allineati. Il valore
Quaternion
rappresenta il quaternione identità (0, 0, 0, 1). Tutte le rotazioni possono essere analizzate rispetto a questa posizione.Quando il dispositivo è appoggiato su un piano con lo schermo rivolto verso l'alto e la parte superiore del dispositivo (in modalità verticale) è orientata a ovest, il valore di
Quaternion
è (0, 0, 0.707, 0.707). Il dispositivo è stato ruotato di 90 gradi attorno all'asse Z della terra.Quando il dispositivo viene mantenuto in verticale in modo che la parte superiore (in modalità verticale) punti verso il cielo e la parte posteriore del dispositivo sia rivolta verso nord, il dispositivo è stato ruotato di 90 gradi attorno all'asse X. Il valore di
Quaternion
è (0.707, 0, 0, 0.707).Se il dispositivo è posizionato in modo che il bordo sinistro si trova su una tabella e i primi punti a nord, il dispositivo è stato ruotato -90 gradi intorno all'asse Y (o 90 gradi intorno all'asse Y negativo). Il valore di
Quaternion
è (0, -0.707, 0, 0.707).
Informazioni specifiche della piattaforma (orientamento)
Non sono presenti informazioni specifiche della piattaforma relative al sensore di orientamento.