* 仕様書

[REFS[
- [11] [CITE@en[DeviceOrientation Event Specification]] ([TIME[2016-08-19 00:30:43 +09:00]]) <https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation>
- [36] [CITE@en[DeviceOrientation Event Specification]] ([TIME[2016-08-19 00:30:43 +09:00]]) <https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientationabsolute>
- [3] [CITE@en[DeviceOrientation Event Specification]] ([TIME[2016-08-19 00:30:43 +09:00]]) <https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion>
]REFS]

* 方向の記述

[32] [[装置]]の[[方向]]は、基準となる[RUBYB[[[座標枠]]]@en[coordinate frame]]から[[装置座標枠]]への[[変換][変換 (数学)]]として表します
[SRC[>>11]]。

[23] [[座標]]の[RUBYB[[[変換][変換 (数学)]]]@en[transformation]]は、
基準となる[RUBYB[[[座標枠]]]@en[coordinate frame]] ([VAR[X]], [VAR[Y]], [VAR[Z]]) から[[装置座標枠]] ([VAR[x]], [VAR[y]], [VAR[z]])
へと次の通り[[回転]]させるものです [SRC[>>11]]。

[FIG(steps)[
= [25] [VAR[装置座標枠]]を、基準となる[[座標枠]]に揃えます。
= [26] [VAR[装置座標枠]]の [VAR[z]] 軸を [VAR[α]] [[°]] [[回転]]させます。
= [27] [VAR[装置座標枠]]の [VAR[x]] 軸を [VAR[β]] [[°]] [[回転]]させます。
= [29] [VAR[装置座標枠]]の [VAR[y]] 軸を [VAR[γ]] [[°]] [[回転]]させます。
= [30] [VAR[装置座標枠]]を返します。
]FIG]

[24] [[回転]]は、[[右手系]]によります。すなわち、[[軸]]の[[正]]の[[回転]]とは、
[[軸]]の[[正]]方向をみたとき[[時計回り]]となる[[回転]]をいいます。 [SRC[>>11]]

[28] ただし、
[VAR[α]] [[∈]] [ [N[0]], [N[360]] ),
[VAR[β]] [[∈]] [ [N[-180]], [N[180]] ),
[VAR[γ]] [[∈]] [ [N[-90]], [N[90]] ) の範囲内とします。 [SRC[>>11]]

[31] すなわち、この ([VAR[α]], [VAR[β]], [VAR[γ]]) は
[[Z-X'-Y"]] 型 [[intrinsic][自転]] [[Tait-Bryan angles]] です。 [SRC[>>11]]

[33] [VAR[絶対]]は、基準となる[[座標枠]]が[[地球座標枠]]かどうかとします [SRC[>>11]]。

[34] [VAR[α]], [VAR[β]], [VAR[γ]] の値のいずれかまたはすべてが得られない場合は、
[CODE[null]] とすることができます [SRC[>>11]]。

* 方向決定に用いる装置

[35] [VAR[イベント型]]が [CODE[deviceorientation]] の場合、
[VAR[α]]、[VAR[β]]、[VAR[γ]]、[VAR[絶対]]の決定 (>>32)
は、[[加速度計]]と[[ジャイロスコープ]]だけを使った何らかの基準からの回転
([VAR[絶対]] = [[偽]]) とすることができます。
それが得られない場合や、より高い精度の値が得られる場合には、
[[地球座標枠]]からの回転 ([VAR[絶対]] = [[真]]) としても構いません。 [SRC[>>11]]

[39] [VAR[イベント型]]が [CODE[deviceorientationabsolute]] の場合、
[[磁力計]]も用いることができ、[[地球座標枠]]からの回転 ([VAR[絶対]] = [[真]])
としなければ[MUST[なりません]]。 [SRC[>>36]]

* IDL 属性

[19] 
[CODE(DOMi)@en[DeviceRotationRate]] [[インターフェイス]]の [[IDL属性]]と
[CODE(DOMi)@en[DeviceRotationRateInit]] [[辞書]]の[[メンバー][辞書メンバー]]と
[CODE(DOMi)@en[DeviceOrientationEvent]] [[インターフェイス]]の [[IDL属性]]と
[CODE(DOMi)@en[DeviceOrientationEventInit]] [[辞書]]の[[メンバー][辞書メンバー]]である
[DFN[[CODE(DOMa)@en[alpha][装置の方向]]]], [DFN[[CODE(DOMa)@en[beta][装置の方向]]]],
[DFN[[CODE(DOMa)@en[gamma][装置の方向]]]] は、 [CODE(IDL)@en[[[long]][[?][nullable]]]] 型です。
[[IDL属性]]は[[読み取り専用]]、
[[辞書メンバー]]の[[既定値]]は [CODE[null]] です。 [SRC[>>11]]

[20] [CODE(DOMi)@en[DeviceOrientationEvent]] [[インターフェイス]]の [[IDL属性]]と
[CODE(DOMi)@en[DeviceOrientationEventInit]] [[辞書]]の[[メンバー][辞書メンバー]]である
[DFN[[CODE[absolute][装置の方向]]]] は、 [CODE(IDL)@en[boolean]] 型です。
[[IDL属性]]は[[読み取り専用]]、
[[辞書メンバー]]の[[既定値]]は[[偽]]です。 [SRC[>>11]]

[2] これらは、それぞれ[VAR[α]]、[VAR[β]]、[VAR[γ]]、[VAR[絶対]]を表すために使われます。

[4] [DFN[[CODE(DOMi)@en[DeviceRotationRate]]]] [[インターフェイス]] [SRC[>>3]] と
[DFN[[CODE(DOMi)@en[DeviceRotationRateInit]]]] [[辞書]] [SRC[>>3]] は、
方向の変化率の記述に用いられます。

[5] この[[インターフェイス]]は、[[文書環境]]に[[晒され]]ますが、
[CODE(IDL xattr)@en[NoInterfaceObject]] です [SRC[>>3]]。

[6] この[[インターフェイス]]と[[辞書]]は、[[メンバー]]として
[CODE(DOMa)@en[alpha][装置の方向]], [CODE(DOMa)@en[beta][装置の方向]],
[CODE(DOMa)@en[gamma][装置の方向]] を持ちます [SRC[>>3]]。

[7] この[[インターフェイス]]は、 [CODE(DOMa)@en[rotationRate]] [[IDL属性]]で使われます。
[[装置の方向]]の変化率を [[°]]/[[s]] [[単位]]で表します [SRC[>>3]]。

* 関連

[8] [CODE[GeolocationCoordinates]] の [CODE[heading][GeolocationCoordinates]]
は進行方向を表します。

* 歴史

[1] [[DeviceOrientation Event]] 参照。
