Condividi tramite


Accesso ai sensori dei dispositivi

Browse sample. Esplorare l'esempio

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:

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.