方位センサー
方位センサー(OrientationSensor)は端末が向いている方向を取得します。取得する値は回転行列と四元数という形で取得可能で、主に3D表現などのベクトル演算に利用します。
その他に、OrientationSensorより簡単な値を返すSimpleOrientationSensorがあります。
OrientationSensorの値を取得する
(サンプルファイル:「OrientationSensorSample.zip」)
方位センサーの値は以下のように取得します。
this._sensor = OrientationSensor.GetDefault();
if (this._sensor != null)
{
this._sensor.ReadingChanged += _sensor_ReadingChanged;
}
else
{
System.Diagnostics.Debug.WriteLine("OrientationSensor is null");
}
ReadingChangedで取得した値は以下のように取り出します。
async void _sensor_ReadingChanged(OrientationSensor sender, OrientationSensorReadingChangedEventArgs args)
{
OrientationSensorReading reading = args.Reading;
// 四元数を取得する
SensorQuaternion quaternion = reading.Quaternion;
// 回転行列を取得する
SensorRotationMatrix rotationMatrix = reading.RotationMatrix;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
quaternionX.Text = String.Format("{0,8:0.00000}", quaternion.X);
quaternionY.Text = String.Format("{0,8:0.00000}", quaternion.Y);
quaternionZ.Text = String.Format("{0,8:0.00000}", quaternion.Z);
quaternionW.Text = String.Format("{0,8:0.00000}", quaternion.W);
matrix_11.Text = String.Format("{0,8:0.00000}", rotationMatrix.M11);
matrix_12.Text = String.Format("{0,8:0.00000}", rotationMatrix.M12);
matrix_13.Text = String.Format("{0,8:0.00000}", rotationMatrix.M13);
matrix_21.Text = String.Format("{0,8:0.00000}", rotationMatrix.M21);
matrix_22.Text = String.Format("{0,8:0.00000}", rotationMatrix.M22);
matrix_23.Text = String.Format("{0,8:0.00000}", rotationMatrix.M23);
matrix_31.Text = String.Format("{0,8:0.00000}", rotationMatrix.M31);
matrix_32.Text = String.Format("{0,8:0.00000}", rotationMatrix.M32);
matrix_33.Text = String.Format("{0,8:0.00000}", rotationMatrix.M33);
});
}
サンプルコードのquaternionには四元数が、rotationMatrixには3×3の回転行列が格納されます。
SimpleOrientationSensorの値を取得する
SimpleOrientationSensorはデバイスの方向を簡単に表現したクラスです。以下のように値の変更を取得します。
this._simpleSensor = SimpleOrientationSensor.GetDefault();
if (this._simpleSensor != null)
{
this._simpleSensor.OrientationChanged += _simpleSensor_OrientationChanged;
}
else
{
System.Diagnostics.Debug.WriteLine("SimpleOrientationSensor is null");
}
ReadingChangedで取得した値は以下のように取り出します。
SimpleOrientation orientation = args.Orientation;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
switch (orientation)
{
case SimpleOrientation.Facedown:
this.orientation.Text = "デバイスは下向きです";
break;
case SimpleOrientation.Faceup:
this.orientation.Text = "デバイスは上向きです";
break;
case SimpleOrientation.NotRotated:
this.orientation.Text = "デバイスは回転していません";
break;
case SimpleOrientation.Rotated180DegreesCounterclockwise:
this.orientation.Text = "180度反時計回りに回転しています";
break;
case SimpleOrientation.Rotated270DegreesCounterclockwise:
this.orientation.Text = "270度反時計回りに回転しています";
break;
case SimpleOrientation.Rotated90DegreesCounterclockwise:
this.orientation.Text = "90度反時計回りに回転しています";
break;
}
});
端末の向きはSimpleOrientation列挙型で取得でき、それぞれの値は以下の意味を持ちます。
Facedown
端末は下向きで画面が伏せられています。
Faceup
端末は上向きで画面が表示されています。
NotRotated
端末は回転していません。
Rotated180DegreesCounterclockwise
反時計回りに180度回転しています。
Rotated270DegreesCounterclockwise
反時計回りに270度回転しています。
Rotated90DegreesCounterclockwise
反時計回りに90度回転しています。
光センサー
光センサーは端末のセンサー部が受け取る光の量を測定します。
光センサーの値を取得する
(サンプルファイル:「LightSensorSample.zip」)
光センサーの値の取得方法もこれまでと同様です。
this._sensor = LightSensor.GetDefault();
if (this._sensor != null)
{
this._sensor.ReadingChanged += _sensor_ReadingChanged;
}
else
{
System.Diagnostics.Debug.WriteLine("Light Sensor is Null");
}
ReadingChangedで取得した値は以下のように取り出します。
LightSensorReading reading = args.Reading;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
this.LUX.Text = reading.IlluminanceInLux.ToString();
});
reading.IlluminanceInLuxの値は光量を表すルクスです。

