【この訳に特有な表記規約】
◎表記記号1. 序論
方位~sensor~API ( `Orientation Sensor API^en )は、[ ~deviceの物理的~方位を 3 次元な~Cartesian座標系との関係で述べる汎用~情報 ]を供するため, 汎用~sensor~API( `Generic Sensor API^en ) `GENERIC-SENSOR$r を拡張する。 ◎ The Orientation Sensor API extends the Generic Sensor API [GENERIC-SENSOR] to provide generic information describing the device’s physical orientation in relation to a three dimensional Cartesian coordinate system.
`AbsoluteOrientationSensor$I ~classは、 `OrientationSensor$I ~interfaceを継承し, ~deviceの物理的~方位を`地球の基準~座標系$との関係で述べる。 ◎ The AbsoluteOrientationSensor class inherits from the OrientationSensor interface and describes the device’s physical orientation in relation to the Earth’s reference coordinate system.
他の下位classは、[ 真北【北極】や非~stationary方向などの,他の~stationary方向 ]との関係で方位を述べる — ~deviceの自前の~z位置との関係で,最新な最も安定的な~z位置へ向かって次第にずれる( `drift^en )様な。【?】 ◎ Other subclasses describe the orientation in relation to other stationary directions, such as true north, or non stationary directions, like in relation to a devices own z-position, drifting towards its latest most stable z-position.
`OrientationSensor$I 下位classが供する~dataは、 `DeviceOrientationEvent$I からの~dataに類似するが, 方位~sensor~APIには,次に挙げる有意な相違点がある — `OrientationSensor$I 下位classは: ◎ The data provided by the OrientationSensor subclasses are similar to data from DeviceOrientationEvent, but the Orientation Sensor API has the following significant differences:
- ~WebGLに互換な形式(四元数( `quaternion^en ), 回転~行列)で方位~dataを表現する。 ◎ The Orientation Sensor API represents orientation data in WebGL-compatible formats (quaternion, rotation matrix).
- より厳密な待時間~要件を満たす。 ◎ The Orientation Sensor API satisfies stricter latency requirements.
- 方位~dataを得するときに,どの`低level$な~motion~sensorを利用するかを明示的に定義する — したがって,アリな相互運用能の課題を~~未然に~~防ぐ。 ◎ Unlike DeviceOrientationEvent, the OrientationSensor subclasses explicitly define which low-level motion sensors are used to obtain the orientation data, thus obviating possible interoperability issues.
- その各~instanceは、 `SensorOptions$I 構築子~parameterを介して環境設定-可能である。 ◎ Instances of OrientationSensor subclasses are configurable via SensorOptions constructor parameter.
2. 利用事例と要件
利用事例と要件は、 `MOTION-SENSORS$r `§ 利用事例と要件@~MOTION-SENSORS#usecases-and-requirements$ にて論じられている。 ◎ The use cases and requirements are discussed in the Motion Sensors Explainer document.
3. 例
const %sensor = new AbsoluteOrientationSensor(); const %mat4 = new Float32Array(16); %sensor.start(); %sensor.onerror = %event => console.log(%event.error.name, %event.error.message); %sensor.onreading = () => { %sensor.populateMatrix(%mat4); };
const %sensor = new AbsoluteOrientationSensor({ frequency: 60 }); const %mat4 = new Float32Array(16); %sensor.start(); %sensor.onerror = %event => console.log(%event.error.name, %event.error.message); function draw(%timestamp) { window.requestAnimationFrame(draw); try { %sensor.populateMatrix(%mat4); } catch(%e) { /* %mat4 は更新されなかった ◎ mat4 has not been updated. */ } /* 何か描く… ◎ Drawing... */ } window.requestAnimationFrame(draw);
4. ~securityと~privacyの考慮点
汎用~sensor~API `GENERIC-SENSOR$r に述べられたものを超える,特有な~security/~privacyの考慮点は無い。 ◎ There are no specific security and privacy considerations beyond those described in the Generic Sensor API [GENERIC-SENSOR].
5. ~model
`OrientationSensor$I ~classは、 `Sensor$I ~classを拡張し,~device方位~dataを表現している汎用~interfaceを供する。 ◎ The OrientationSensor class extends the Sensor class and provides generic interface representing device orientation data.
`~sensor型$ `方位~sensor@i ( `Orientation Sensor^en )の`最新な読取り~map$に~accessするためには、~UAは 各,具象-方位~sensorが利用する`低level$な~sensorに対し `~sensor~accessを要請する$ 抽象-演算を呼出すモノトスル。 下の表tに、具象-方位~sensorと,`低level$な~sensorにより定義される許可~tokenたちとの間の対応付けを述べる。 ◎ To access the Orientation Sensor sensor type’s latest reading, the user agent must invoke request sensor access abstract operation for each of the low-level sensors used by the concrete orientation sensor. The table below describes mapping between concrete orientation sensors and permission tokens defined by low-level sensors.
`OrientationSensor^I 下位class | 許可~token |
---|---|
`AbsoluteOrientationSensor$I | `accelerometer^l, `gyroscope^l, `magnetometer^l |
`RelativeOrientationSensor$I | `accelerometer^l, `gyroscope^l |
`AbsoluteOrientationSensor$I は、 `施策により制御される特能$であり,文字列[ `accelerometer^l / `gyroscope^l / `magnetometer^l ]により識別される。 その`既定の許容list$は `'self'^l とする。 ◎ The AbsoluteOrientationSensor is a policy-controlled feature identified by strings "accelerometer", "gyroscope" and "magnetometer" . Its default allowlist is 'self'.
`RelativeOrientationSensor$I は、 `施策により制御される特能$であり,文字列[ `accelerometer^l / `gyroscope^l ]により識別される。 その`既定の許容list$は `'self'^l とする。 ◎ The RelativeOrientationSensor is a policy-controlled feature identified by strings "accelerometer" and "gyroscope". Its default allowlist is 'self'.
`~sensor型$ `方位~sensor$i の `Sensor$I 用の`最新な読取り~map$は、 次のような`~entry$mapを含む:
- `~key$map ~EQ `quaternion^l
-
`値$mapは、 単位~四元数【 ~norm ~EQ 1 を満たす四元数】 `QUATERNIONS$r を成す 4 個の成分からなり,順に次で与えられる ⇒# %X ~EQ %Vx ~MUL `sin^op( ~theta ~DIV 2 ), %Y ~EQ %Vy ~MUL `sin^op( ~theta ~DIV 2 ), %Z ~EQ %Vz ~MUL `sin^op( ~theta ~DIV 2 ), %W ~EQ `cos^op( ~theta ~DIV 2 )
ここで ⇒# [ %Vx, %Vy, %Vz ] は,回転の軸を表現している単位~vectorを表す。 ~theta は,この軸~周りの回転~角度を表す。
この四元数は、 次のような回転~行列に`変換されて@#converting-a-quaternion-to-rotation-matrix$から利用されることになる `QUATCONV$r :
四元数から回転~行列への変換-法。
【 この行列に関する記述は,原文では他所にあるが、 各~変数を説明する都合により,ここに移動している。 】
注記: この`~list$においては、四元数~成分 `QUATERNIONS$r は, [ %X, %Y, %Z, %W ]【![ %q1, %q2, %q3, %q0 ]】 として配列される。 すなわち,四元数の~vectorを表現する成分たち【 i, j, k 成分】が, ~scalar成分 %W【!`cos^op(~theta ~DIV 2)】 より前に来る。 この順序が利用されているのは,既存の~WebGL~frameworkを成す大部分との互換性をより良く得るためであるが、他の~libraryには — [ %W, %X, %Y, %Z ]【![ %q0, %q1, %q2, %q3 ]】 のように — 異なる順序を利用する配列として四元数を公開するものもある。 ◎ Note: The quaternion components are arranged in the list as [q1, q2, q3, q0] [QUATERNIONS], i.e. the components representing the vector part of the quaternion go first and the scalar part component which is equal to cos(θ/2) goes after. This order is used for better compatibility with the most of the existing WebGL frameworks, however other libraries could use a different order when exposing quaternion as an array, e.g. [q0, q1, q2, q3].
具象- `OrientationSensor$I 下位classのうち[ `低level$な~motion~sensorたちが成す`~sensor融合$を通して作成されるもの ]は、次の表tに呈示される: ◎ The concrete OrientationSensor subclasses that are created through sensor-fusion of the low-level motion sensors are presented in the table below:
`OrientationSensor^I 下位class | `低level$な~motion~sensorたち |
---|---|
`AbsoluteOrientationSensor$I | `Accelerometer$I, `Gyroscope$I, `Magnetometer$I |
`RelativeOrientationSensor$I | `Accelerometer$I, `Gyroscope$I |
注記: `低level$な~sensor[ `Accelerometer$I / `Gyroscope$I / `Magnetometer$I ]は[ `ACCELEROMETER$r / `GYROSCOPE$r / `MAGNETOMETER$r ]仕様に定義される。 `~sensor融合$は,~platformに特有であり、 ~software内でも,~hardware(すなわち,`~sensor~hub$)内でも起こり得る。 ◎ Note: Accelerometer, Gyroscope and Magnetometer low-level sensors are defined in [ACCELEROMETER], [GYROSCOPE], and [MAGNETOMETER] specifications respectively. The sensor fusion is platform specific and can happen in software or hardware, i.e. on a sensor hub.
この例の~codeは、 `start()$m を~callする前に, `AbsoluteOrientationSensor$I 用の許可を明示的に~queryする。 ◎ This example code explicitly queries permissions for AbsoluteOrientationSensor before calling start().
const %sensor = new AbsoluteOrientationSensor(); Promise.all( [navigator.permissions.query({ name: "accelerometer" }), navigator.permissions.query({ name: "magnetometer" }), navigator.permissions.query({ name: "gyroscope" })]) .then(%results => { if (%results.every(%result => %result.state === "granted")) { %sensor.start(); ... } else { console.log("AbsoluteOrientationSensor を利用する許可はありません。"); } });
単純に `start()$m を~callして `onerror$m `~event~handler$を~~登録する,別の~approachもある。 ◎ Another approach is to simply call start() and subscribe to onerror event handler.
const %sensor = new AbsoluteOrientationSensor(); %sensor.onerror = %event => { if (%event.error.name === 'NotAllowedError') console.log("AbsoluteOrientationSensor を利用する許可はありません。"); }; %sensor.start();
5.1. `AbsoluteOrientationSensor^I の~model
`~sensor型$ `絶対~方位~sensor@i は、 `MOTION-SENSORS$r `§ 絶対~方位~sensor@~MOTION-SENSORS#absolute-orientation$ にて述べられる~sensorを表現する: ◎ The Absolute Orientation Sensor sensor type represents the sensor described in Motion Sensors Explainer § absolute-orientation.\
- その`拡張~sensor~interface$は、 `OrientationSensor$I の下位class `AbsoluteOrientationSensor$I である。 ◎ Its associated extension sensor interface is AbsoluteOrientationSensor, a subclass of OrientationSensor.\
- それが`属する~virtual~sensor型$は、 `absolute-orientation$vsT とする。 ◎ Its associated virtual sensor type is "absolute-orientation".
絶対~方位~sensor用の`最新な読取り~map$[ `quaternion^l ] の値は、 3 次元な~Cartesian座標系として定義される `地球の基準~座標系@ との関係で,~deviceの`局所~座標系$の回転を表現する — ここで、 地球の基準~座標系の: ◎ For the absolute orientation sensor the value of latest reading["quaternion"] represents the rotation of a device’s local coordinate system in relation to the Earth’s reference coordinate system defined as a three dimensional Cartesian coordinate system (x, y, z), where:
- ~x軸は、 ~y, ~z の~vector-productであり、地面に接していて東を指す。 ◎ x-axis is a vector product of y.z that is tangential to the ground and points east,
- ~y軸は、地面に接していて磁北( `magnetic north^en 【~compassの針が指す向き】)を指す。 ◎ y-axis is tangential to the ground and points towards magnetic north, and
- ~z軸は、~x軸, ~y軸が成す平面に垂直であり,天を指す。 ◎ z-axis points towards the sky and is perpendicular to the plane made up of x and y axes.
~deviceの`局所~座標系$は、`低level$~motion~sensor用に定義されるそれと同じである。 それは、`~device座標系$にも`~screen座標系$にもなり得る。 ◎ The device’s local coordinate system is the same as defined for the low-level motion sensors. It can be either the device coordinate system or the screen coordinate system.
注記: 下の図は、~deviceの`局所~座標系$と`地球の基準~座標系$が整列される事例を表現する — したがって,方位~sensorの`最新な読取り~map$は、各~軸~周りに 0 rad `SI$r の回転を表現することになる。 ◎ Note: Figure below represents the case where device’s local coordinate system and the Earth’s reference coordinate system are aligned, therefore, orientation sensor’s latest reading would represent 0 (rad) [SI] rotation about each axis.
`AbsoluteOrientationSensor^I 座標系。 ◎ AbsoluteOrientationSensor coordinate system.
5.2. `RelativeOrientationSensor^I ~model
`~sensor型$ `相対~方位~sensor@i は、 `MOTION-SENSORS$r `§ 相対~方位~sensor@~MOTION-SENSORS#relative-orientation$ にて述べられる~sensorを表現する: ◎ The Relative Orientation Sensor sensor type represents the sensor described in Motion Sensors Explainer § relative-orientation.\
- それに結付けられる`拡張~sensor~interface$は、 `OrientationSensor$I の下位class `RelativeOrientationSensor$I である。 ◎ Its associated extension sensor interface is RelativeOrientationSensor, a subclass of OrientationSensor.\
- それが`属する~virtual~sensor型$は、 `relative-orientation$vsT とする。 ◎ Its associated virtual sensor type is "relative-orientation".
相対~方位~sensor用の`最新な読取り~map$[ `quaternion^l ] の値は、`~stationary基準~座標系$との関係で,~deviceの`局所~座標系$の回転を表現する。 `~stationary基準~座標系$は、~gyroscope~sensorが導入する偏りに因り,次第にずれ得る — その結果、~sensorが供する回転~値も次第にずれ得る。 ◎ For the relative orientation sensor the value of latest reading["quaternion"] represents the rotation of a device’s local coordinate system in relation to a stationary reference coordinate system. The stationary reference coordinate system may drift due to the bias introduced by the gyroscope sensor, thus, the rotation value provided by the sensor, may drift over time.
`~stationary基準~座標系@ は、[ ~sensorを~hostしている~deviceが環境の中で移動しても,~stationaryであり続ける ]ような, 3 次元な~Cartesian慣性-座標系として定義される。 ◎ The stationary reference coordinate system is defined as an inertial three dimensional Cartesian coordinate system that remains stationary as the device hosting the sensor moves through the environment.
~deviceの`局所~座標系$は、`低level$な~motion~sensor用に定義されるそれと同じであり,`~device座標系$にも`~screen座標系$にもなり得る。 ◎ The device’s local coordinate system is the same as defined for the low-level motion sensors. It can be either the device coordinate system or the screen coordinate system.
注記: 相対~方位~sensor~dataは、絶対~方位~sensorが供するものより正確aになることもある — ~sensorは,磁場により影響されないので。 ◎ Note: The relative orientation sensor data could be more accurate than the one provided by absolute orientation sensor, as the sensor is not affected by magnetic fields.
6. ~API
6.1. `OrientationSensor^I ~interface
typedef (`Float32Array$ or `Float64Array$ or `DOMMatrix$I) `RotationMatrixType@I; [`SecureContext$, `Exposed$=Window] interface `OrientationSensor@I : `Sensor$I { readonly attribute `FrozenArray$<`double$>? `quaternion@m; `undefined$ `populateMatrix@m(`RotationMatrixType$I %targetMatrix); }; enum `OrientationSensorLocalCoordinateSystem@I { `device@l, `screen@l }; dictionary `OrientationSensorOptions@I : `SensorOptions$I { `OrientationSensorLocalCoordinateSystem$I `referenceFrame@mb = "device"; };
`populateMatrix(targetMatrix)@m ~method手続きは: ◎ 6.1.2. OrientationSensor.populateMatrix() ◎ The populateMatrix(targetMatrix) method steps are:
- %種別 ~LET %targetMatrix に応じて ⇒# `Float32Array$I であるならば `配列^i / `Float64Array$I であるならば `配列^i / `DOMMatrix$I であるならば `行列^i ◎ ↓
- ~IF[ %種別 ~EQ `配列^i ]~AND[ %targetMatrix の~size ~LT 16 ] ⇒ ~THROW `TypeError$E ◎ If targetMatrix is of type Float32Array or Float64Array with a size less than sixteen, throw a "TypeError" exception and abort these steps.
- %四元数 ~LET `最新な読取り~mapから値を取得する$( コレ, `quaternion^l ) ◎ Let quaternion be the result of invoking get value from latest reading with this and "quaternion" as arguments.
- ~IF[ %四元数 ~EQ ~NULL ] ⇒ ~THROW `NotReadableError$E ◎ If quaternion is null, throw a "NotReadableError" DOMException and abort these steps.
- %回転~行列 ~LET `四元数を回転~行列に変換する$( %四元数 ) ◎ Let rotationMatrix be the result of converting a quaternion to rotation matrix with quaternion[0], quaternion[1], quaternion[2], and quaternion[3].
- ~IF[ %種別 ~EQ `配列^i ] ⇒ ~EACH( 整数 %i ~IN { 0 〜 15 } ) に対し ⇒ %targetMatrix[ %i ] ~SET %回転~行列[ %i ] ◎ If targetMatrix is of Float32Array or Float64Array type, run these sub-steps: • Set targetMatrix[0] = rotationMatrix[0] • Set targetMatrix[1] = rotationMatrix[1] • Set targetMatrix[2] = rotationMatrix[2] • Set targetMatrix[3] = rotationMatrix[3] • Set targetMatrix[4] = rotationMatrix[4] • Set targetMatrix[5] = rotationMatrix[5] • Set targetMatrix[6] = rotationMatrix[6] • Set targetMatrix[7] = rotationMatrix[7] • Set targetMatrix[8] = rotationMatrix[8] • Set targetMatrix[9] = rotationMatrix[9] • Set targetMatrix[10] = rotationMatrix[10] • Set targetMatrix[11] = rotationMatrix[11] • Set targetMatrix[12] = rotationMatrix[12] • Set targetMatrix[13] = rotationMatrix[13] • Set targetMatrix[14] = rotationMatrix[14] • Set targetMatrix[15] = rotationMatrix[15]
- ~ELSE( %種別 ~EQ `行列^i ) ⇒ `行列を~3D行列に初期化する$( %targetMatrix, %回転~行列 ) ◎ If targetMatrix is of DOMMatrix type, run these sub-steps: • Set targetMatrix.m11 = rotationMatrix[0] • Set targetMatrix.m12 = rotationMatrix[1] • Set targetMatrix.m13 = rotationMatrix[2] • Set targetMatrix.m14 = rotationMatrix[3] • Set targetMatrix.m21 = rotationMatrix[4] • Set targetMatrix.m22 = rotationMatrix[5] • Set targetMatrix.m23 = rotationMatrix[6] • Set targetMatrix.m24 = rotationMatrix[7] • Set targetMatrix.m31 = rotationMatrix[8] • Set targetMatrix.m32 = rotationMatrix[9] • Set targetMatrix.m33 = rotationMatrix[10] • Set targetMatrix.m34 = rotationMatrix[11] • Set targetMatrix.m41 = rotationMatrix[12] • Set targetMatrix.m42 = rotationMatrix[13] • Set targetMatrix.m43 = rotationMatrix[14] • Set targetMatrix.m44 = rotationMatrix[15]
6.2. `AbsoluteOrientationSensor^I ~interface
[`SecureContext$, `Exposed$=Window] interface `AbsoluteOrientationSensor@I : `OrientationSensor$I { `AbsoluteOrientationSensor$mc(optional `OrientationSensorOptions$I %sensorOptions = {}); };
`AbsoluteOrientationSensor$I が`~supportする~sensor~option群$は ⇒ `frequency^l, `referenceFrame^l ◎ Supported sensor options for AbsoluteOrientationSensor are "frequency" and "referenceFrame".
6.3. `RelativeOrientationSensor^I ~interface
[`SecureContext$, `Exposed$=Window] interface `RelativeOrientationSensor@I : `OrientationSensor$I { `RelativeOrientationSensor$mc(optional `OrientationSensorOptions$I %sensorOptions = {}); };
`RelativeOrientationSensor$I が`~supportする~sensor~option群$は ⇒ `frequency^l, `referenceFrame^l ◎ Supported sensor options for RelativeOrientationSensor are "frequency" and "referenceFrame".
7. 抽象-演算
`方位~sensor~objを初期化する@ ときは、所与の ( %方位, %~option群 ) に対し: ◎ 7.1. Construct an Orientation Sensor object
- ~Assert: %方位 は `OrientationSensor$I ~interfaceを実装する ◎ input • orientation_interface, an interface identifier whose inherited interfaces contains OrientationSensor.
- ~Assert: %~option群 は `OrientationSensorOptions$I 辞書である ◎ • options, a OrientationSensorOptions object. ◎ output • An OrientationSensor object.
- ~IF[ `~sensor施策により制御される特能を検査する$( `方位~sensor$i ) ~EQ ~F ] ⇒ ~THROW `SecurityError$E ◎ Let allowed be the result of invoking check sensor policy-controlled features with the interface identified by orientation_interface. ◎ If allowed is false, then: • Throw a SecurityError DOMException.
- `~sensor~objを初期化する$( %方位, %~option群 ) ◎ Let orientation be a new instance of the interface identified by orientation_interface. ◎ Invoke initialize a sensor object with orientation and options.
- %方位 用の`局所~座標系$を %~option群[ "`referenceFrame$mb" ] に応じて,次で定義する ⇒# `screen^l ならば `~screen座標系$/ `device^l ならば `~device座標系$ ◎ If options.referenceFrame is "screen", then: • Define local coordinate system for orientation as the screen coordinate system. ◎ Otherwise, define local coordinate system for orientation as the device coordinate system. ◎ Return orientation.
【 原文の この~algoは,新たな~instanceを作成して返しているが、 `WEBIDL$r の`構築子~手続き$の規約に則って,この訳では初期化のみ行うよう改めている。 】
`四元数を回転~行列に変換する@ ときは、 所与の ( `~list$ %四元数 ) に対し:
注記: これは、 `上で述べた回転~行列@#_quaternion-rotation-matrix$を列主導順な~listで表現して返す。
- ~Assert: [ %四元数 の`~size$ ~EQ 4 ]~AND[ %四元数 を成す各~itemは,いずれも~numberである ]
- ( %x, %y, %z, %w ) ~LET ( %四元数[ 0 ], %四元数[ 1 ], %四元数[ 2 ], %四元数[ 3 ] )
- ~RET « 次に挙げる 16 個の~item » ⇒# 1 ~MINUS 2 ~MUL %y ~MUL %y ~MINUS 2 ~MUL %z ~MUL %z, 2 ~MUL %x ~MUL %y ~MINUS 2 ~MUL %z ~MUL %w, 2 ~MUL %x ~MUL %z + 2 ~MUL %y ~MUL %w, 0, 2 ~MUL %x ~MUL %y + 2 ~MUL %z ~MUL %w, 1 ~MINUS 2 ~MUL %x ~MUL %x ~MINUS 2 ~MUL %z ~MUL %z, 2 ~MUL %y ~MUL %z ~MINUS 2 ~MUL %x ~MUL %w, 0, 2 ~MUL %x ~MUL %z ~MINUS 2 ~MUL %y ~MUL %w, 2 ~MUL %y ~MUL %z + 2 ~MUL %x ~MUL %w, 1 ~MINUS 2 ~MUL %x ~MUL %x ~MINUS 2 ~MUL %y ~MUL %y, 0, 0, 0, 0, 1
`~Euler角度から四元数を作成する@ ときは、 所与の ( ~number %~alpha, ~number %~beta, ~number %~gamma ) に対し: ◎ 7.3. Create a quaternion from Euler angles ◎ To create a quaternion from Euler angles given a number alpha, a number beta and a number gamma:
- ( %~alpha, %~beta, %~gamma ) ~SET 順に, ( %~alpha, %~beta, %~gamma ) を度d数から~radian数へ換算した結果 ◎ Let alphaInRadians be alpha converted from degrees to radians. ◎ Let betaInRadians be beta converted from degrees to radians. ◎ Let gammaInRadians be gamma converted from degrees to radians.
- %cosZ ~LET `cos^op( 0.5 ~MUL %~alpha ) ◎ Let cosZ be the cosine of (0.5 * alphaInRadians).
- %sinZ ~LET `sin^op( 0.5 ~MUL %~alpha ) ◎ Let sinZ be the sine of (0.5 * alphaInRadians).
- %cosX ~LET `cos^op( 0.5 ~MUL %~beta ) ◎ Let cosX be the cosine of (0.5 * betaInRadians).
- %sinX ~LET `sin^op( 0.5 ~MUL %~beta ) ◎ Let sinX be the sine of (0.5 * betaInRadians).
- %cosY ~LET `cos^op( 0.5 ~MUL %~gamma ) ◎ Let cosY be the cosine of (0.5 * gammaInRadians).
- %sinY ~LET `sin^op( 0.5 ~MUL %~gamma ) ◎ Let sinY be the sine of (0.5 * gammaInRadians).
-
~RET « 次に挙げる 4 個の~item » ⇒# %sinX ~MUL %cosY ~MUL %cosZ ~MINUS %cosX ~MUL %sinY ~MUL %sinZ, %cosX ~MUL %sinY ~MUL %cosZ ~PLUS %sinX ~MUL %cosY ~MUL %sinZ, %cosX ~MUL %cosY ~MUL %sinZ ~PLUS %sinX ~MUL %sinY ~MUL %cosZ, %cosX ~MUL %cosY ~MUL %cosZ ~MINUS %sinX ~MUL %sinY ~MUL %sinZ
(順に,四元数の[ ~x, ~y, ~z, ~w ]成分を与える。)
◎ Let quaternionX be (sinX * cosY * cosZ - cosX * sinY * sinZ). ◎ Let quaternionY be (cosX * sinY * cosZ + sinX * cosY * sinZ). ◎ Let quaternionZ be (cosX * cosY * sinZ + sinX * sinY * cosZ). ◎ Let quaternionW be (cosX * cosY * cosZ - sinX * sinY * sinZ). ◎ Return « quaternionX, quaternionY, quaternionZ, quaternionW ».
8. 自動化
この節では、 `GENERIC-SENSOR$r に定義される`自動化@~SENSORS#automation$を拡張する — `方位~sensor$i に特有な`~virtual~sensor~metadata$を供することにより。 ◎ This section extends Generic Sensor API § 9 Automation by providing Orientation Sensor-specific virtual sensor metadata.
8.1. 他の仕様に対する改変
この仕様は、 次に従って `ORIENTATION-EVENT$r `§ 自動化@~DEVICEORIENTATION#automation$ を統合する。 ◎ This specification integrates with DeviceOrientation Event Specification § automation as follows.
注記: この仕様は、 現時点では, `WebDriver@https://w3c.github.io/webdriver/$cite において四元数を直に指定するための (したがって,四元数から~Euler角度を導出するための) 仕方を供さない。 この裁定が為されたわけは、 単純さを得るための他に,[ 自動化の利用者は,入力として~Euler角度で作業する (あるいは,自前で、 特定の四元数~値を選び取って,対応する~Euler角度の値を供する) 見込みがずっと高い ]ことが前提にある。 異なる利用事例で,四元数~値を直に供せるようにすることに関心がある利用者は、 `この仕様の課題~追跡器@https://github.com/w3c/orientation-sensor/issues$ を介して~feedbackを寄せられたし。 ◎ Note: This specification does not currently provide a way for specifying quaternions in WebDriver (and consequently deriving Euler angles from the quaternion) directly. This decision was made for simplicity and under the assumption that automation users are much more likely to work with Euler angles as inputs (or pick specific quaternion values and provide the corresponding Euler angle values on their own). Feedback from users with different use cases who are interested in being able to provide quaternion values directly is welcome via this specification’s issue tracker.
8.2. 絶対~方位~sensorの自動化
`絶対~方位~sensor$i が`属する~virtual~sensor型$ `absolute-orientation$vsT, それに対応する[ `型ごとの~virtual~sensor~metadata$を成す`~entry$map ]は、 `ORIENTATION-EVENT$r `§ 自動化@~DEVICEORIENTATION#automation$ にて定義される。 ◎ The absolute-orientation virtual sensor type and its corresponding entry in the per-type virtual sensor metadata map are defined in DeviceOrientation Event Specification § automation.
8.3. 相対~方位~sensorの自動化
`相対~方位~sensor$i が`属する~virtual~sensor型$ `relative-orientation$vsT, それに対応する[ `型ごとの~virtual~sensor~metadata$を成す`~entry$map ]は、 `ORIENTATION-EVENT$r `§ 自動化@~DEVICEORIENTATION#automation$ にて定義される。 ◎ The relative-orientation virtual sensor type and its corresponding entry in the per-type virtual sensor metadata map are defined in DeviceOrientation Event Specification § automation.
謝辞
汎用~sensor~APIの作業を為された `Tobie Langel^en 氏に。 ◎ Tobie Langel for the work on Generic Sensor API.