ジャイロメーター
ジャイロメーターとは、デバイスの角速度を取得するセンサーです。
基本的な概念や座標軸は加速度センサーと変わりませんが、ジャイロセンサーは角速度を測るものなので
デバイスを回転させた瞬間は値は大きくなりますが、しばらくすると値は0.0に収束します。
上の座標軸で考えると、デバイスを回転させた瞬間に回転した座標軸の値が大きくなり、回転していない座標軸は0.0のままです。
その後、徐々にすべての座標軸の値が0.0になります。
Gyrometer
ジャイロメーターを使用するには、Gyrometerクラスを利用します。
まず、このようなXAMLUIをつくります。
<Grid> <StackPanel> <TextBlock x:Name="text_x" FontSize="24" /> <TextBlock x:Name="text_y" FontSize="24" /> <TextBlock x:Name="text_z" FontSize="24" /> </StackPanel> </Grid>
コンストラクタでGyrometerクラスを初期化し、ReportIntervalプロパティでジャイロメーターから値を取得する間隔を設定します。
MinimumIntervalプロパティではデバイスのジャイロセンサー取得間隔の最小値を取得することができます。
ReadingChangedイベントでジャイロメーターから値を取得できますが、これは別スレッドで呼ばれるのでDispatcher.RunAsyncでUIスレッドから呼ぶ必要があります。
Gyrometer gyrometer = Gyrometer.GetDefault(); gyrometer.ReportInterval = gyrometer.MinimumReportInterval * 50; gyrometer.ReadingChanged += async(s, ee) => { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { text_x.Text = string.Format("X={0}", ee.Reading.AngularVelocityX.ToString("F1")); text_y.Text = string.Format("Y={0}", ee.Reading.AngularVelocityY.ToString("F1")); text_z.Text = string.Format("Z={0}", ee.Reading.AngularVelocityZ.ToString("F1")); }); Debug.WriteLine("X={0} Y={1} Z={2}", ee.Reading.AngularVelocityX.ToString("F1"), ee.Reading.AngularVelocityY.ToString("F1"), ee.Reading.AngularVelocityZ.ToString("F1")); };