【この訳に特有な表記規約】
◎表記記号1. 序論
◎非規範的この仕様は、 ~hostしている~deviceの物理的な方位や運動についての情報を得するため, 以下に挙げる新たな~DOM~eventたち【!two】を供する。 ~eventにより供される情報は、 生な~sensor~dataではなく,高~levelな~dataであり、 下層の情報~sourceを問わない。 共通的な情報の~sourceには、[ ~gyroscope, ~compass, 加速度計 ]も含まれる。 ◎ This specification provides two new DOM events for obtaining information about the physical orientation and movement of the hosting device. The information provided by the events is not raw sensor data, but rather high-level data which is agnostic to the underlying source of information. Common sources of information include gyroscopes, compasses and accelerometers.
- `deviceorientation$et
- この~eventは、 ~deviceの物理的な方位を表現する — ~deviceに局所的な座標~frameからの一連の回転として表出される。 ◎ The deviceorientation event represents the physical orientation of the device, expressed as a series of rotations from a local coordinate frame.
- `deviceorientationabsolute$et
- 【 `相対~方位$に代えて`絶対~方位$が利用されることを除き, `deviceorientation$et と同様 (この項は、 この訳による補完)。 】
- `devicemotion$et
- この~eventは、 ~deviceの加速度を表現する — 当の~deviceにて定義される座標~frameにおける座標で表出される。 それはまた、 ~deviceに局所的な座標~frameについての回転~率も給する。 実用的にアリな所では、 ~deviceの重心の加速度も~eventに供されるベキである。 ◎ The devicemotion event represents the acceleration of the device, expressed in Cartesian coordinates in a coordinate frame defined in the device. It also supplies the rotation rate of the device about a local coordinate frame. Where practically possible, the event should provide the acceleration of the device’s center of mass.
【 “座標~frame( `coordinate frame^en, 略して `frame^en )” とは、 抽象-概念としては座標系( `coordinate system^en )と同義であるが, 物理的な何かに直に結付けられていることを含意する (その何かが物体なら、 回転など,物体の動きに~~追従することになる)。 】
以下の~codeに、 これらの~eventの基本的な利用を抜き出す。 ◎ The following code extracts illustrate basic use of the events.
`deviceorientation$et ~eventを受取るよう登録する例: ◎ Registering to receive deviceorientation events:
window.addEventListener("deviceorientation", %event => { /* %event の `alpha^m, `beta^m, `gamma^m ~memberを処理する ◎ process event.alpha, event.beta and event.gamma */ }); /* あるいは: ◎ Alternatively... */ window.ondeviceorientation = %event => { /* %event の `alpha^m, `beta^m, `gamma^m ~memberを処理する ◎ process event.alpha, event.beta and event.gamma */ };
当の~deviceは水平~面に寝かされていて,その~screenの上端は西を指しているときの方位は: ◎ A device lying flat on a horizontal surface with the top of the screen pointing West has the following orientation:
{ alpha: 90, beta: 0, gamma: 0 };
~compass-heading( `compass heading^en )†を取得するには、 単純に 360 度dから `alpha^m を減算する。 ~deviceが水平~面~上で回されるに伴い,~compass-headingは[ 360 − `alpha^m ]になる。 【†この文脈においては、北極方向から時計回りに,~screenの上端が指す向きまでの角度。】 ◎ To get the compass heading, one would simply subtract alpha from 360 degrees. As the device is turned on the horizontal surface, the compass heading is (360 - alpha).
利用者が握っている~deviceの~screenが垂直面を成していて, 上端は真上を指しているとき、 `beta^m の値は, `alpha^m, `gamma^m が何であれ 90 になる。 ◎ A user is holding the device in their hand, with the screen in a vertical plane and the top of the screen pointing upwards. The value of beta is 90, irrespective of what alpha and gamma are.
利用者が対面するように握っている~deviceは[ ~compass-heading†は %N 度dにあり,その~screenは垂直面を成していて, 上端は右を指している ]とき、 ~deviceの方位は: ◎ A user facing a compass heading of alpha degrees is holding the device in their hand, with the screen in a vertical plane and the top of the screen pointing to their right. The orientation of the device is:
{ alpha: 270 - %N, beta: 0, gamma: 90 };
【† この文脈の “~compass-heading” は、 上の例と整合していない。 おそらく、 `§ ~compass-headingの計算-法@#worked-example$にて定義されるそれを意味する(~screenに直交し,奥方を指す~vectorの水平~成分)。 】
`devicemotion$et ~eventを受取るよう登録する例: ◎ Registering to receive devicemotion events:
window.addEventListener("devicemotion", (%event) => { /* %event の[ `acceleration^m, `accelerationIncludingGravity^m, `rotationRate^m, `interval^m ]を処理する。 ◎ Process event.acceleration, event.accelerationIncludingGravity, event.rotationRate and event.interval */ }); /* あるいは: ◎ Alternatively... */ window.ondevicemotion = (%event) => { /* %event の[ `acceleration^m, `accelerationIncludingGravity^m, `rotationRate^m, `interval^m ]を処理する。 ◎ Process event.acceleration, event.accelerationIncludingGravity, event.rotationRate and event.interval */ };
当の~deviceは,水平~面に寝かされていて その~screenは真上を向いている下では、 `acceleration^m は 0 になり, `accelerationIncludingGravity^m は次の値になる: ◎ A device lying flat on a horizontal surface with the screen upmost has an acceleration of zero and the following value for accelerationIncludingGravity:
{ x: 0, y: 0, z: 9.8 };
~deviceは、 自由落下していて,その~screenは水平かつ真上を向いている下では: `accelerationIncludingGravity^m は 0 になり, `acceleration^m は次の値になる: ◎ A device in free-fall, with the screen horizontal and upmost, has an accelerationIncludingGravity of zero and the following value for acceleration:
{ x: 0, y: 0, z: -9.8 };
~deviceは[ 半径 %r の~~円周を,右周りに速度 %v で~~運行している乗物 ]に搭載されていて、 その~screenは[ 垂直面を成していて, 上端は真上を指していて, 乗物の後部に対面している ]とする。 ~deviceは[ `acceleration^m, `accelerationIncludingGravity^m ]どちらに対しても,正な~x成分[ %x ~EQ %v ~pow2 ~DIV %r ]を記録し、 `rotationRate.gamma^m に負な値[ %γ ~EQ − ( %v ~DIV %r ) ~MUL ( 180 ~DIV π ) ]を記録する: ◎ A device is mounted in a vehicle, with the screen in a vertical plane, the top uppermost and facing the rear of the vehicle. The vehicle is travelling at speed v around a right-hand bend of radius r. The device records a positive x component for both acceleration and accelerationIncludingGravity. The device also records a negative value for rotationRate.gamma:
{ acceleration: {x: %x, y: 0, z: 0}, accelerationIncludingGravity: {x: %x, y: 9.8, z: 0}, rotationRate: {alpha: 0, beta: 0, gamma: %γ} };【! v^2/r 】
2. 視野
◎非規範的この仕様が視野に入れるのは,[ ~hostしている~deviceの物理的な方位や動き ]を表現する~eventであり、 方位~dataを操作するための~utilityは視野から外れる — 次に挙げるものなど ⇒# 座標系変換~library/ 生な~sensor~dataへの~accessを供する/ そのような~sensorと直に~interfaceするための~method ◎ Within the scope of this specification are events that represent the physical orientation and motion of the hosting device. Out of scope are utilities for manipulating orientation data, such as transformation libraries, and providing access to raw sensor data or methods for directly interfacing with these sensors.
3. ~model
3.1. ~deviceの方位
この仕様は、 ~deviceの物理的な方位を`実装定義$な基準~座標~frameに相対的な一連の回転として表出する。 ◎ This specification expresses a device’s physical orientation as a series of rotations relative to an implementation-defined reference coordinate frame.
回転たちが成す連列は、 内在的な[ ~Z - ~X1 - ~Y2 ]型の `Tait-Bryan^en 角度 ( `intrinsic Tait-Bryan angles of type Z - X' - Y''^en ) — 以下では,単に `~Euler角度@ と称する† — を与える。 それは、 `ACCELEROMETER$r にて定義される`~device座標系$に対し適用され, 以下に要約される: ◎ The sequence of rotation steps is a set of intrinsic Tait-Bryan angles of type Z - X' - Y'' ([EULERANGLES]) that are applied on the device coordinate system defined in [ACCELEROMETER] and summarized below:
【† 他所から簡便に参照するため、 この訳では,`~Euler角度$( `Euler angle^en )をこの定義による用語として利用する — ~Euler角度の定義には、 他にもいくつか変種があるが (`参考@https://en.wikipedia.org/wiki/Euler_angles$)。 】【 内在的とは、 `~device座標系$に適用されることを意味する。 それは、 ~deviceの動きに追従する: ~X1は 最初に~Z軸周りの回転を適用した後の~X軸, ~Y2は さらに~X1軸周りの回転を適用した後の~Y軸を表す。 】
- `~x@ は[ ~screen/~keyboard ]の平面~内にあり,正な値は[ ~screen/~keyboard ]の右手~側を向く。 ◎ x is in the plane of the screen or keyboard and is positive towards the right hand side of the screen or keyboard.
- `~y@ は[ ~screen/~keyboard ]の平面~内にあり,正な値は[ ~screen/~keyboard ]の上端を向く。 ◎ y is in the plane of the screen or keyboard and is positive towards the top of the screen or keyboard.
- `~z@ は[ ~screen/~keyboard ]の平面に垂直であり,正な値は[ ~screen/~keyboard ]から外へ【利用者~側へ】を向く。 ◎ z is perpendicular to the screen or keyboard, positive out of the screen or keyboard.
電話や~tabletなどの携帯~device用には、 ~device座標~frameは,標準な方位にある~screen — 概して縦置き — に相対的に定義される。 これは、[ 引き出し式~keyboardなどの~~部位を~~展開していない / ~displayなどの旋回する~~部位は その既定の位置にある ]ことを意味する。 そのような~~部位が回転されたり~~展開されて,~screenの方位が変化しても、 ~deviceに相対的な座標~frameの方位には影響しない。 ~laptop-computerにおいては、 ~device座標~frameは,組み込まれた~keyboardに相対的に定義される。 【要約すれば、~deviceの~~可動部ではない,本体の方位に基づく。】 ◎ For a mobile device such as a phone or tablet, the device coordinate frame is defined relative to the screen in its standard orientation, typically portrait. This means that slide-out elements such as keyboards are not deployed, and swiveling elements such as displays are folded to their default position. If the orientation of the screen changes when the device is rotated or a slide-out keyboard is deployed, this does not affect the orientation of the coordinate frame relative to the device. For a laptop computer, the device coordinate frame is defined relative to the integrated keyboard.
注記: ~screen方位における変化を検出するよう望んでいる利用者【~API利用者】は、 `SCREEN-ORIENTATION$r を参照rするべきである。 ◎ Note: Users wishing to detect changes in screen orientation should refer to [SCREEN-ORIENTATION].
回転は,右手系を利用するモノトスル — 軸~周りの正な回転は、 軸の正な方向に向かって眺めたとき,時計回りになるよう。 ◎ Rotations must use the right-hand convention, such that positive rotation around an axis is clockwise when viewed along the positive direction of the axis.
注記: この仕様が利用する座標系は、 `CSS-TRANSFORMS-2$r `§ 変形の描画~model@~TRANSFORM2#transform-rendering$ とは異なる — そこでは、 ~y軸の正な向きは下端を指し,回転は左手系に従う。 加えて, `GEOMETRY-1$r に指定される[ `rotateSelf()@~GEOMETRY#dom-dommatrix-rotateself$c / `rotate()@~GEOMETRY#dom-dommatrixreadonly-rotate$c ]は、 回転を Z-Y'-X'' 順序で適用する — それは、 ここで指定される順序とは異なる。 ◎ Note: the coordinate system used by this specification differs from CSS Transforms 2 § 4 The Transform Rendering Model, where the y axis is positive to the bottom and rotations follow the left-hand convention. Additionally, rotateSelf() and rotate(), specified in [GEOMETRY-1], apply rotations in an Z - Y' - X'' order, which differs from the order specified here.
`DeviceOrientationEvent^I0 [ `alpha$m, `beta$m, `gamma$m ]により表現される回転は、 次の手続きにより遂げられる: ◎ A rotation represented by alpha, beta and gamma is carried out by the following steps:
-
初期~位置: ◎ ↓ Rotate the device frame around its z axis by alpha degrees, with alpha in [0, 360).
-
~device座標~frame【!device frame】をその`~z$軸~周りで `alpha$m 度d — 0 以上, 360 未満 — だけ回転する。 ◎ ↑
-
~device座標~frame【!device frame】を その`~x$軸~周りで `beta$m 度d — ~MINUS 180 以上, 180 未満 — だけ回転する。 ◎ Rotate the device frame around its x axis by beta degrees, with beta in [-180, 180).
-
~device座標~frame【!device frame】を その`~y$軸~周りで `gamma$m 度d — ~MINUS 90 以上, 90 未満 — だけ回転する。 ◎ Rotate the device frame around its y axis by gamma degrees, with gamma in [-90, 90).
注記: これらの角度は,数学的な規約に従って選ばれたが、 `alpha$m は~compass-heading【~screenの上端が指す方角】とは~~逆回転を表すことに加え, 乗物~力学に利用される `roll-pitch-yaw^en 規約には合致しない。 ◎ Note: This choice of angles follows mathematical convention, but means that alpha is in the opposite sense to a compass heading. It also means that the angles do not match the roll-pitch-yaw convention used in vehicle dynamics.
3.1.1. 基準~座標系の~~選択
~deviceの方位は、 常に,別の座標系 — 基準~座標系 — に相対的になる。 どの座標系を選ぶかは、[ 当の方位が伝達する情報の種類, 方位~dataの~source ]どちらにも波及する。 ◎ A device’s orientation is always relative to another coordinate system, whose choice influences the kind of information that the orientation conveys as well as the source of the orientation data.
`相対~方位@ ( `relative device orientation^en, 略して `relative orientation^en ) は、[ 加速度計, ~gyroscope ]で測定され, 基準~座標系は恣意的に~~選ばれる。 その帰結として、 方位~dataは,当の~deviceの初期~位置に相対的な変化についての情報を供する。 ◎ Relative device orientation is measured with an accelerometer and a gyroscope, and the reference coordinate system is arbitrary. Consequently, the orientation data provides information about changes relative to the initial position of the device.
注記: これは、 ~native~platformの用語においては,次に類似する ⇒# `Windows^i 上では相対 `OrientationSensor@https://learn.microsoft.com/en-us/uwp/api/windows.devices.sensors.sensorreadingtype#remarks$c / `Android^i 上では `~game回転~vector~sensor@https://developer.android.com/reference/android/hardware/Sensor#TYPE_GAME_ROTATION_VECTOR$ / `Core Motion^i 用には `xArbitraryZVertical@https://developer.apple.com/documentation/coremotion/cmattitudereferenceframe/1615953-xarbitraryzvertical$c ~option ◎ Note: In native platform terms, this is similar to a relative OrientationSensor on Windows, a game rotation vector sensor on Android, or the xArbitraryZVertical option for Core Motion.
`絶対~方位@ ( `absolute orientation^en ) は、[ 加速度計, ~gyroscope, 磁力計 ]で測定され, 基準~座標系は`地球の基準~座標系$である。 ◎ Absolute orientation is measured with an accelerometer, a gyroscope and a magnetometer, and the reference coordinate system is the Earth’s reference coordinate system.
注記: これは、 ~native~platformの用語においては,次に類似する ⇒# `Windows^i 上では,絶対 `OrientationSensor@https://learn.microsoft.com/en-us/uwp/api/windows.devices.sensors.sensorreadingtype#remarks$c / `Android^i 上では `回転~vector~sensor@https://developer.android.com/reference/android/hardware/Sensor#TYPE_ROTATION_VECTOR$ / `Core Motion^i 用には `xMagneticNorthZVertical@https://developer.apple.com/documentation/coremotion/cmattitudereferenceframe/1616123-xmagneticnorthzvertical$c ~option ◎ Note: In native platform terms, this is similar to an absolute OrientationSensor on Windows, a rotation vector sensor on Android, or the xMagneticNorthZVertical option for Core Motion.
3.2. ~deviceの動き
この仕様は、 空間における~deviceの動きを その[ 加速~率と回転~率 ]を測定することにより表出する — それらは[ 加速度計と~gyroscope ]から得される。 その~dataは、 前~節にて要約した`~device座標系$に相対的に供される。 ◎ This specification expresses a device’s motion in space by measuring its acceleration and rotation rate, which are obtained from an accelerometer and a gyroscope. The data is provided relative to the device coordinate system summarized in the previous section.
加速度は、 ~deviceの速度における時間に関する変化~率であり, m/s~pow2(~meter / 秒の 2 乗)で表出される。 ◎ Acceleration is the rate of change of velocity of a device with respect to time. Is is expressed in meters per second squared (m/s2).
`線形~加速度@ ( `linear device acceleration^en, 略して `linear acceleration^en )は、 重力【!gravity force】による寄与が無い~deviceの加速~率を表現する。 それは、 当の~deviceが卓上に置かれているとき, 0 m/s~pow2 になる。 ◎ Linear device acceleration represents the device’s acceleration rate without the contribution of the gravity force. When the device is laying flat on a table, its linear acceleration is 0 m/s2.
`重力を伴う加速度@ ( `acceleration with gravity^en )は、 重力の効果を含む加速度であり, その値は固有-加速度 `PROPERACCELERATION$r を表現する。 それは、 ~deviceが自由落下しているとき, 0 m/s~pow2 になる。 これは,多くの応用では有用さに劣るが、 `線形~加速度$を供せない実装(例えば,~gyroscopeを欠くことに因り)が最善な労による~supportを供する手段として供される。 ◎ When the acceleration includes gravity, its value includes the effect of gravity and represents proper acceleration ([PROPERACCELERATION]). When the device is in free-fall, the acceleration is 0 m/s2. This is less useful in many applications but is provided as a means of providing best-effort support by implementations that are unable to provide linear acceleration (due, for example, to the lack of a gyroscope).
注記: 実施においては、 `重力を伴う加速度$は, `加速度計@~MOTION-SENSORS#accelerometer$ `MOTION-SENSORS$r から得された生な読取り — または `G-FORCE$r 【 “G がかかる” の “G” (加速度)】 — を表現する一方で、 `線形~加速度$は, `線形~加速度~sensor@~MOTION-SENSORS#linear-acceleration-sensor$ `MOTION-SENSORS$r からの読取りを供する。 後者は、 `~sensor融合$になる見込みが高い。 測定し得る各種[ 加速度計, 加速度 ]についての より詳細な論は、 `MOTION-SENSORS$r, `ACCELEROMETER$r を見よ。 ◎ Note: In practice, acceleration with gravity represents the raw readings obtained from an Motion Sensors Explainer § accelerometer, or the [G-FORCE] whereas linear acceleration provides the readings of a Motion Sensors Explainer § linear-acceleration-sensor and is likely a fusion sensor. [MOTION-SENSORS] and [ACCELEROMETER] both contain a more detailed discussion about the different types of accelerometers and accelerations that can be measured.
`回転~率@ は、[ `~device座標系$における指定された軸 ]周りで~deviceが回転する率を測定する。 ~device方位と同じく, 回転は,右手系を利用するモノトスル — 軸~周りの正な回転は、 軸の正な方向に向かって眺めたとき,時計回りになるよう。 `回転~率$は、 deg/s (度d数 / 秒)で測定される。 ◎ The rotation rate measures the rate at which the device rotates about a specified axis in the device coordinate system. As with device orientation, rotations must use the right-hand convention, such that positive rotation around an axis is clockwise when viewed along the positive direction of the axis. The rotation rate is measured in degrees per second (deg/s).
注記: [ ~gyroscope, 回転~率, 測定 ]についての より詳細な論は、 `MOTION-SENSORS$r, `GYROSCOPE$r を見よ。 ◎ Note: [MOTION-SENSORS] and [GYROSCOPE] both contain a more detailed discussion of gyroscopes, rotation rates and measurements.
4. 許可
この統合は、[ `DeviceMotionEvent.requestPermission()@https://wpt.fyi/results/orientation-event/motion/requestPermission.https.window.html$c, `DeviceOrientationEvent.requestPermission()@https://wpt.fyi/results/orientation-event/orientation/requestPermission.https.window.html$c ]~testの合格-率が低いことに因り,`~risk下$にある。 ◎ This integration is at risk due to the low pass rate of the DeviceMotionEvent.requestPermission() and DeviceOrientationEvent.requestPermission() tests.
この仕様は、 次に挙げる文字列で識別される`強力な特能$ — それらは、 `施策により制御される特能$でもある — を — それら用の`許可$と伴に — 定義する: ◎ This specification is a powerful feature and, as such, it defines the following permissions which are policy-controlled features with the given default allowlists:
- `accelerometer@l
- `gyroscope@l
- `magnetometer@l
いずれも、 その`既定の許容list$は `'self'$l とする。
◎ "accelerometer", whose default allowlist is 'self'. ◎ "gyroscope", whose default allowlist is 'self'. ◎ "magnetometer", whose default allowlist is 'self'.注記: どの~eventが`配送-$されるようになるかは、 どの`許可$が`是認-$されたかに依存する: ◎ Note: Which events get dispatched depends on which permissions have been granted:
- `deviceorientation$et ~eventは、 当の~eventに対し実装が供する~dataが`相対~方位$であるときは[ `accelerometer$l, `gyroscope$l ]用の`許可$が`是認-$された場合に限り`配送-$され, `絶対~方位$へ~fall-backするときは `magnetometer$l 用の`許可$も`是認-$されなければナラナイ。 ◎ When providing relative orientation data, the deviceorientation event is only dispatched if the "accelerometer" and "gyroscope" permissions are granted. For the implementation to fall back to absolute orientation data, the "magnetometer" permission must also be granted.
- `deviceorientationabsolute$et ~eventは、[ `accelerometer$l, `gyroscope$l, `magnetometer$l ]用の`許可$が`是認-$された場合に限り`配送-$される。 ◎ The deviceorientationabsolute event is only dispatched if the "accelerometer", "gyroscope", and "magnetometer" permissions are granted.
- `devicemotion$et ~eventは、[ `accelerometer$l, `gyroscope$l ]用の`許可$が`是認-$された場合に限り`配送-$される。 ◎ The devicemotion event is only dispatched if the "accelerometer" and "gyroscope" permissions are granted.
5. ~task~source
この仕様に言及される`~task$用の`~task~source$は、 `~deviceの動きと方位~task~source@ である。 ◎ The task source for the tasks mentioned in this specification is the device motion and orientation task source.
6. ~API
6.1. `deviceorientation^et ~event
partial interface `Window$I { [`SecureContext$] attribute `EventHandler$I `ondeviceorientation$n; }; [`Exposed$=Window, `SecureContext$] interface `DeviceOrientationEvent@I : `Event$I { `DeviceOrientationEvent@mc(DOMString %type, optional `DeviceOrientationEventInit$I %eventInitDict = {}); readonly attribute double? `alpha$m; readonly attribute double? `beta$m; readonly attribute double? `gamma$m; readonly attribute boolean `absolute$m; static `Promise$<`PermissionState$I> `requestPermission$m(optional `boolean$ %absolute = false); }; dictionary `DeviceOrientationEventInit@I : `EventInit$I { double? `alpha@m = null; double? `beta@m = null; double? `gamma@m = null; boolean `absolute@m = false; };
`ondeviceorientation@n 属性は、 名前 `ondeviceorientation^l を伴う`~event~handler$用の`~event~handler~IDL属性$である — 対応する`~event~handler~event型$は、 `deviceorientation@et である。 ◎ The ondeviceorientation attribute is an event handler IDL attribute for the ondeviceorientation event handler, whose event handler event type is deviceorientation.
【 `ondeviceorientation$n は `Window$I ~interfaceに定義されているが、 なぜ, `Window^I 用の他の多くの`~event~handler~IDL属性$と同様に `WindowEventHandlers$I ~interface~mixinにて定義されないのかは不明。 以下の各節に定義される~event~handler~IDL属性も同様。 】
`DeviceOrientationEvent^I0`alpha@m 属性は:
- `~Euler角度$における~Z軸~周りの回転を表現する。
- その取得子~手続きは、 初期化-時の値を返す。
`beta@m 属性は:
- `~Euler角度$における (~Z軸~周りの回転が適用された後に生産された) ~X1軸~周りの回転を表現する。
- その取得子~手続きは、 初期化-時の値を返す。
`gamma@m 属性は:
- `~Euler角度$における (~Z, ~X1軸~周りの回転が この順序で適用された後に生産された) ~Y2軸~周りの回転を表現する。
- その取得子~手続きは、 初期化-時の値を返す。
`absolute@m 属性は:
- [ `相対~方位$, `絶対~方位$ ]どちらの~dataが供されているかを指示する。
- その取得子~手続きは、 初期化-時の値を返す。
`requestPermission(absolute)@m 静的~method手続きは: ◎ The requestPermission(absolute) method steps are:
- %大域~obj ~LET `現在の大域~obj$ ◎ Let global be the current global object.
- %一過な作動化か ~LET ~IS[ コレに`関連な大域~obj$は`一過な作動化を有して$いる ] ◎ Let hasTransientActivation be true if this's relevant global object has transient activation, and false otherwise.
- %~promise ~LET `新たな~promise$( コレに`関連な~realm$ ) ◎ Let promise be a new promise in this's relevant Realm.
- %許可~群 ~LET « `accelerometer$l, `gyroscope$l » ◎ Let permissions be « "accelerometer", "gyroscope" ».
- ~IF[ %absolute ~EQ ~T ] ⇒ %許可~群 に `magnetometer$l を`付加する$ ◎ If absolute is true, append "magnetometer" » to permissions.
-
この段は`並列的$に走らす: ◎ Run these steps in parallel:
-
%許可~群 を成す ~EACH( %名前 ) に対し: ◎ For each name of permissions:
-
~IF[ %名前 の`許可~状態$ ~EQ `prompt$l ]~AND[ %一過な作動化か ~EQ ~F ]: ◎ If name’s permission state is "prompt" and hasTransientActivation is false:
-
`大域~taskを~queueする$( `~deviceの動きと方位~task~source$, %大域~obj, 次の手続き ) ◎ Queue a global task on the device motion and orientation task source given global to\
手続きは ⇒ `~promiseを却下する$( %~promise, `NotAllowedError$E 例外 ) ◎ reject promise with a "NotAllowedError" DOMException. - ~RET ◎ Return.
-
-
- %許可~状態 ~LET `granted$l ◎ Let permissionState be "granted".
-
%許可~群 を成す ~EACH( %名前 ) に対し: ◎ For each name of permissions:
注記: 複数の許可を一度に要請するための~algoは無い。 しかしながら,~UAには、[ 複数種の媒体~用の同時並行な要請たち ]を[ 利用者が対面する単独の許可~promptに束ねる ]ことが奨励される。 ◎ Note: There is no algorithm for requesting multiple permissions at once. However, user agents are encouraged to bundle concurrent requests for different kinds of media into a single user-facing permission prompt.
-
~IF[ `利用する許可を要請する$( %名前 ) ~NEQ `granted$l ]: ◎ If the result of requesting permission to use name is not "granted":
- %許可~状態 ~SET `denied$l ◎ Set permissionState to "denied".
- ~BREAK ◎ Break.
-
-
`大域~taskを~queueする$( `~deviceの動きと方位~task~source$, %大域~obj, 次の手続き ) ◎ Queue a global task on the device motion and orientation task source given global to\
手続きは ⇒ `~promiseを解決する$( %~promise, %許可~状態 ) ◎ resolve promise with permissionState.
-
- ~RET %~promise ◎ Return promise.
`方位~eventを発火する@ ときは、 所与の ( `Window$I %~window, 文字列 %~event名, 真偽値 %絶対か ) に対し: ◎ To fire an orientation event given a DOMString event, Window window and boolean absolute:
- %方位 ~LET ~NULL ◎ Let orientation be null.
- %~top-level辿可能 ~LET %~window に`対応する~navigable$の`~top-level辿可能$nav ◎ Let topLevelTraversable be window’s navigable's top-level traversable.
- %~virtual~sensor型 ~LET %絶対か に応じて ⇒# ~T ならば `absolute-orientation$vsT / ~F ならば `relative-orientation$vsT ◎ Let virtualSensorType be "relative-orientation" if absolute is false, and "absolute-orientation" otherwise.
- %~virtual~sensor ~LET %~top-level辿可能 の`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ◎ ↓
-
~IF[ %~virtual~sensor ~NEQ ε ]~AND[ %~virtual~sensor の`読取りを供せるか$vS ~EQ ~T ]:
- %方位 ~SET 新たな`~map$
-
« `alpha^l, `beta^l, `gamma^l » を成す ~EACH( %~key ) に対し ⇒ %方位[ %~key ] ~SET [ %~virtual~sensor は %~key に対応する最新な読取りを供せるならば,その値/ ~ELSE_ ~NULL ]
【 [ `alpha^l / `beta^l / `gamma^l ]は、 `~Euler角度$における[ ~Z / ~X1 / ~Y2 ]軸~周りの回転~角度に対応する。 】【 供せるかどうかが,軸に応じて異なる場合もあるかもしれない。 】
- ~ELSE ⇒ %方位 ~SET %絶対か に応じて ⇒# ~F ならば三次元-平面における~deviceの`相対~方位$/ ~T ならば三次元-平面における~deviceの`絶対~方位$ ◎ Otherwise: • If absolute is false: •• Set orientation to the device’s relative orientation in the tridimensional plane. • Otherwise: •• Set orientation to the device’s absolute orientation in the tridimensional plane.
- %許可~群 ~LET « `accelerometer$l, `gyroscope$l » ◎ ↓
- ~IF[ %絶対か ~EQ ~T ] ⇒ %許可~群 に `magnetometer$l を`付加する$ ◎ Let permissions be null. ◎ If absolute is false: • Set permissions to « "accelerometer", "gyroscope" ». ◎ Otherwise: • Set permissions to « "accelerometer", "gyroscope", "magnetometer" ».
- %環境 ~LET %~window に`関連な設定群~obj$ ◎ Let environment be window’s relevant settings object.
-
この段は`並列的$に走らす: ◎ Run these steps in parallel:
-
%許可~群 を成す ~EACH( %許可~名 ) に対し: ◎ For each permission in permissions:
- %状態 ~LET `現在の許可~状態を取得する$( %許可~名, %環境 ) ◎ Let state be the result of getting the current permission state with permission and environment.
- ~IF[ %状態 ~NEQ `granted$l ] ⇒ ~RET ◎ If state is not "granted", return.
-
`大域~taskを~queueする$( `~deviceの動きと方位~task~source$, %~window, 次の手続き ) ◎ Queue a global task on the device motion and orientation task source given window to run\
手続きは: ◎ the following steps:
- ( %~alpha, %~beta, %~gamma ) ~LET ( ~NULL, ~NULL, ~NULL ) ◎ ↓
- ~IF[ %方位[ `alpha^l ] ~NEQ ~NULL ] ⇒ %~alpha ~SET 精度 0.1 deg までに制限された %方位[ `alpha^l ] ◎ Let z be orientation’s representation as intrinsic Tait-Bryan angles Z - X' - Y'' along the Z axis, or null if the implementation cannot provide an angle value. ◎ If z is not null, limit z’s precision to 0.1 degrees.
- ~IF[ %方位[ `beta^l ] ~NEQ ~NULL ] ⇒ %~beta ~SET 精度 0.1 deg までに制限された %方位[ `beta^l ] ◎ Let x be orientation’s representation as intrinsic Tait-Bryan angles Z - X' - Y'' along the X' axis, or null if the implementation cannot provide an angle value. ◎ If x is not null, limit x’s precision to 0.1 degrees.
- ~IF[ %方位[ `gamma^l ] ~NEQ ~NULL ] ⇒ %~gamma ~SET 精度 0.1 deg までに制限された %方位[ `gamma^l ] ◎ Let y be orientation’s representation as intrinsic Tait-Bryan angles Z - X' - Y'' along the Y'' axis, or null if the implementation cannot provide an angle value. ◎ If y is not null, limit y’s precision to 0.1 degrees.
- `~eventを発火する$( %~window, %~event名, `DeviceOrientationEvent$I ) — 次のように初期化して ⇒# `alpha$m ~SET %~alpha, `beta$m ~SET %~beta, `gamma$m ~SET %~gamma, `absolute$m ~SET %絶対か ◎ Fire an event named event at window, using DeviceOrientationEvent, with the alpha attribute initialized to z, the beta attribute initialized to x, the gamma attribute initialized to y, and the absolute attribute initialized to absolute.
-
`方位における有意な変化@ は、[ 方位~値を前回の値と比較した相違 ]が[ `deviceorientation$et / `deviceorientationabsolute$et ]~eventの発火を請合うことを指示する。 `方位における有意な変化$が生じたかどうか決定する処理nは、 `実装定義$である — 最大な閾値として,変化 1 度dが推奨されるが。 実装は、 ~pageが新鮮な~dataを有していないと予見するに足る事由†があるならば, 有意な変化が生じたものと見なしてもヨイ。 ◎ A significant change in orientation indicates a difference in orientation values compared to the previous ones that warrants the firing of a deviceorientation or deviceorientationabsolute event. The process of determining whether a significant change in orientation has occurred is implementation-defined, though a maximum threshold for change of 1 degree is recommended. Implementations may also consider that it has occurred if they have reason to believe that the page does not have sufficiently fresh data.
【† 例えば、[ 方位~値を “供せる” から “供せない”, またはその逆に変化した ]ときが挙げられよう。 】
注記: 実装は、 `方位における有意な変化$が生じたか否かを決定する際には, `§ 自動化@#automation$ を — ~virtual~sensor読取りの更新-時にそれが査定されるよう — 織り込まなければならない。 ◎ Note: Implementations must take § 9 Automation into account to determine whether a significant change in orientation has occurred, so that a virtual sensor reading update causes it to be assessed.
~UAは, `方位における有意な変化$が生じたときは、 `~navigable$にて`作動中な~window$nav %~window に対し, 次の手続きを実行するモノトスル: ◎ Whenever a significant change in orientation occurs, the user agent must execute the following steps on a navigable's active window window:
【 適用-可能な`~navigable$が複数ある場合、 それら各~navigableに対し,実行されよう。 】
- %文書 ~LET %~window に`結付けられた文書$ ◎ Let document be window’s associated Document.
- ~IF[ %文書 の`可視性~状態$doc ~NEQ `visible^l ] ⇒ ~RET ◎ If document’s visibility state is not "visible", return.
- %特能~群 ~LET « `accelerometer$l, `gyroscope$l » ◎ ↓ Let absolute be false. ◎ Let features be « "accelerometer", "gyroscope" ».
- %絶対か ~LET ~IS[ 実装は`相対~方位$を供せない ]~OR[ 結果の~dataは`相対~方位$より`絶対~方位$の方が正確aである ] ◎ If the implementation cannot provide relative orientation or the resulting absolute orientation data is more accurate: • Set absolute to true.
- ~IF[ %絶対か ~EQ ~T ] ⇒ %特能~群 に `magnetometer$l を`付加する$ ◎ • Append "magnetometer" to features.
- %特能~群 を成す ~EACH( %特能~名 ) に対し ⇒ ~IF[ %文書 には %特能~名 【により識別される特能】の`利用は許容されて$いない ] ⇒ ~RET ◎ For each feature of features: • If document is not allowed to use feature, return.
- `方位~eventを発火する$( %~window, `deviceorientation$et, %絶対か ) ◎ Fire an orientation event with deviceorientation, window, and absolute.
実装は、 方位~情報をまったく供せない場合は,~eventの[ `alpha$m, `beta$m, `gamma$m ]属性をいずれも ~NULL に設定して, `absolute$m 属性を ~F に設定した上で発火するベキである。 ◎ If an implementation can never provide orientation information, the event should be fired with the alpha, beta and gamma attributes set to null, and the absolute attribute set to false.
6.2. `deviceorientationabsolute^et ~event
`deviceorientationabsolute$et ~event, `ondeviceorientationabsolute$n ~event~handler~IDL属性は、 その`実装~経験が限定的@https://wpt.fyi/results/orientation-event/idlharness.https.window.html$であることに因り,`~risk下$にある。 ◎ The deviceorientationabsolute event and its ondeviceorientationabsolute event handler IDL attribute are at risk due to limited implementation experience.
partial interface `Window$I { [`SecureContext$] attribute `EventHandler$I `ondeviceorientationabsolute$n; };
`ondeviceorientationabsolute@n 属性は、 名前 `ondeviceorientationabsolute^l を伴う`~event~handler$用の`~event~handler~IDL属性$である — 対応する`~event~handler~event型$は、 `deviceorientationabsolute@et である。 ◎ The ondeviceorientationabsolute attribute is an event handler IDL attribute for the ondeviceorientationabsolute event handler, whose event handler event type is deviceorientationabsolute.
`deviceorientationabsolute$et ~eventは、 常に`絶対~方位$による~dataを供することを除いて, `deviceorientation$et ~eventに完全に相似的である。 ◎ A deviceorientationabsolute event is completely analogous to the deviceorientation event, except that it must always provide absolute orientation data.
~UAは, `方位における有意な変化$が生じたときは、 `~navigable$にて`作動中な~window$nav %~window に対し, 次の手続きを実行するモノトスル: ◎ Whenever a significant change in orientation occurs, the user agent must execute the following steps on a navigable's active window window:
- `方位~eventを発火する$( %~window, `deviceorientationabsolute$et, ~T ) ◎ Fire an orientation event with deviceorientationabsolute, window, and true.
実装は、 絶対~方位~情報をまったく供せない場合は,~eventの[ `alpha$m, `beta$m, `gamma$m ]属性をいずれも ~NULL に設定して, `absolute$m 属性を ~F に設定した上で発火するベキである。 ◎ If an implementation can never provide absolute orientation information, the event should be fired with the alpha, beta and gamma attributes set to null, and the absolute attribute set to true.
6.3. `devicemotion^et ~event
6.3.1. `DeviceMotionEventAcceleration^I ~interface
[`Exposed$=Window, `SecureContext$] interface `DeviceMotionEventAcceleration@I { readonly attribute `double$? `x$m; readonly attribute `double$? `y$m; readonly attribute `double$? `z$m; };
`DeviceMotionEventAcceleration$I ~interfaceは、 `§ ~deviceの動き@#device-motion-model$ にて述べたとおり, ~deviceの加速度を表現する。 ◎ The DeviceMotionEventAcceleration interface represents the device’s acceleration as described in § 3.2 Device Motion.\
各 `DeviceMotionEventAcceleration$I ~objには、 次に挙げる~dataが結付けられる: ◎ It has the following associated data:
- `~x軸~加速度@ ◎ x axis acceleration
- ~NULL / 当の~deviceの~X軸~~方向の加速~率 — 初期~時は ~NULL とする。 ◎ The device’s acceleration rate along the X axis, or null. It is initially null.
- `~y軸~加速度@ ◎ y axis acceleration
- ~NULL / 当の~deviceの~Y軸~~方向の加速~率 — 初期~時は ~NULL とする。 ◎ The device’s acceleration rate along the Y axis, or null. It is initially null.
- `~z軸~加速度@ ◎ z axis acceleration
- ~NULL / 当の~deviceの~Z軸~~方向の加速~率 — 初期~時は ~NULL とする。 ◎ The device’s acceleration rate along the Z axis, or null. It is initially null.
6.3.2. `DeviceMotionEventRotationRate^I ~interface
[`Exposed$=Window, `SecureContext$] interface `DeviceMotionEventRotationRate@I { readonly attribute `double$? `alpha$m; readonly attribute `double$? `beta$m; readonly attribute `double$? `gamma$m; };
`DeviceMotionEventRotationRate$I ~interfaceは、 `§ ~deviceの動き@#device-motion-model$ にて述べたとおり, ~deviceの`回転~率$を表現する。 ◎ The DeviceMotionEventRotationRate interface represents the device’s rotation rate as described in § 3.2 Device Motion.\
各 `DeviceMotionEventRotationRate$I ~objには、 次に挙げる~dataが結付けられる: ◎ It has the following associated data:
- `~x軸~回転~率@ ◎ x axis rotation rate
- ~NULL / 当の~deviceの~X軸~周りの回転~率 — 初期~時は ~NULL とする。 ◎ The device’s rotation rate about the X axis, or null. It is initially null.
- `~y軸~回転~率@ ◎ y axis rotation rate
- ~NULL / 当の~deviceの~Y軸周りの回転~率 — 初期~時は ~NULL とする。 ◎ The device’s rotation rate about the Y axis, or null. It is initially null.
- `~z軸~回転~率@ ◎ z axis rotation rate
- ~NULL / 当の~deviceの~Z軸周りの回転~率 — 初期~時は ~NULL とする。 ◎ The device’s rotation rate about the Z axis, or null. It is initially null.
6.3.3. `DeviceMotionEvent^I ~interface
partial interface `Window$I { [`SecureContext$] attribute `EventHandler$I `ondevicemotion$n; }; [`Exposed$=Window, `SecureContext$] interface `DeviceMotionEvent@I : `Event$I { `DeviceMotionEvent@mc(`DOMString$ %type, optional `DeviceMotionEventInit$I %eventInitDict = {}); readonly attribute `DeviceMotionEventAcceleration$I? `acceleration$m; readonly attribute `DeviceMotionEventAcceleration$I? `accelerationIncludingGravity$m; readonly attribute `DeviceMotionEventRotationRate$I? `rotationRate$m; readonly attribute `double$ `interval$m; static `Promise$<`PermissionState$I> `requestPermission$m(); }; dictionary `DeviceMotionEventAccelerationInit@I { `double$? `x@m = null; `double$? `y@m = null; `double$? `z@m = null; }; dictionary `DeviceMotionEventRotationRateInit@I { `double$? `alpha@m = null; `double$? `beta@m = null; `double$? `gamma@m = null; }; dictionary `DeviceMotionEventInit@I : `EventInit$I { `DeviceMotionEventAccelerationInit$I `acceleration@m; `DeviceMotionEventAccelerationInit$I `accelerationIncludingGravity@m; `DeviceMotionEventRotationRateInit$I `rotationRate@m; `double$ `interval@m = 0; };
`ondevicemotion@n 属性は、 名前 `ondevicemotion^l を伴う`~event~handler$用の`~event~handler~IDL属性$である — 対応する`~event~handler~event型$は、 `devicemotion@et である。 ◎ The ondevicemotion attribute is an event handler IDL attribute for the ondevicemotion event handler, whose event handler event type is devicemotion.
`DeviceMotionEvent^I0`acceleration@m 属性は:
- 当の~deviceの`線形~加速度$を表現する。
- その取得子~手続きは、 初期化-時の値を返す。
- コレの作成-時には、 ~NULL に初期化するモノトスル。
`accelerationIncludingGravity@m 属性は:
- 当の~deviceの`重力を伴う加速度$を表現する。
- その取得子~手続きは、 初期化-時の値を返す。
- コレの作成-時には、 ~NULL に初期化するモノトスル。
`rotationRate@m 属性は:
- 当の~deviceの`回転~率$を表現する。
- その取得子~手続きは、 初期化-時の値を返す。
- コレの作成-時には、 ~NULL に初期化するモノトスル。
`interval@m 属性は:
- 下層の~hardwareから~dataが得される~interval【~~周期】を表現する。
- ~Web~appによる~dataの~filter法を単純~化するため、 ~intervalは【各~event間にわたって】定数である。
- その取得子~手続きは、 初期化-時の値を~milli秒~数( ms 単位)で表出して返すモノトスル。
`requestPermission()@m 静的~method手続きは: ◎ The requestPermission() method steps are:
- %大域~obj ~LET `現在の大域~obj$ ◎ Let global be the current global object.
- %一過な作動化か ~LET ~IS[ コレに`関連な大域~obj$は`一過な作動化を有して$いる ] ◎ Let hasTransientActivation be true if this's relevant global object has transient activation, and false otherwise.
- %結果 ~LET `新たな~promise$( コレに`関連な~realm$ ) ◎ Let result be a new promise in this's relevant Realm.
-
この段は`並列的$に走らす: ◎ Run these steps in parallel:
- %許可~群 ~LET « `accelerometer$l, `gyroscope$l » ◎ Let permissions be « "accelerometer", "gyroscope" ».
-
%許可~群 を成す ~EACH( %名前 ) に対し: ◎ For each name of permissions:
-
~IF[ %名前 の`許可~状態$ ~EQ `prompt$l ]~AND[ %一過な作動化か ~EQ ~F ]: ◎ If name’s permission state is "prompt" and hasTransientActivation is false:
-
`大域~taskを~queueする$( `~deviceの動きと方位~task~source$, %大域~obj, 次の手続き ) ◎ Queue a global task on the device motion and orientation task source given global to\
手続きは ⇒ `~promiseを却下する$( %結果, `NotAllowedError$E 例外 ) ◎ reject result with a "NotAllowedError" DOMException. - ~RET ◎ Return.
-
-
- %許可~状態 ~LET `granted$l ◎ Let permissionState be "granted".
-
%許可~群 を成す ~EACH( %名前 ) に対し: ◎ For each name of permissions:
注記: 複数の許可を一度に要請するための~algoは無い。 しかしながら,~UAには、[ 複数種の媒体~用の同時並行な要請たち ]を[ 利用者が対面する単独の許可~promptに束ねる ]ことが奨励される。 ◎ Note: There is no algorithm for requesting multiple permissions at once. However, user agents are encouraged to bundle concurrent requests for different kinds of media into a single user-facing permission prompt.
-
~IF[ `利用する許可を要請する$( %名前 ) ~NEQ `granted$l ]: ◎ If the result of requesting permission to use name is not "granted":
- %許可~状態 ~SET `denied$l ◎ Set permissionState to "denied".
- ~BREAK ◎ Break.
-
-
`大域~taskを~queueする$( `~deviceの動きと方位~task~source$, %大域~obj, 次の手続き ) ◎ Queue a global task on the device motion and orientation task source given global to\
手続きは ⇒ `~promiseを解決する$( %結果, %許可~状態 ) ◎ resolve result with permissionState.
- ~RET %結果 ◎ Return result.
~UAは,`実装定義$な~interval %~interval で、 `~navigable$にて`作動中な~window$nav %~window に対し, 次の手続きを実行するモノトスル: ◎ At an implementation-defined interval interval, the user agent must execute the following steps on a navigable's active window window:
【 適用-可能な`~navigable$が複数ある場合、 それらに対し同期的に実行されるかどうかは指定されていない。 】
- %文書 ~LET %~window に`結付けられた文書$ ◎ Let document be window’s associated Document.
- ~IF[ %文書 の`可視性~状態$doc ~NEQ `visible^l ] ⇒ ~RET ◎ If document’s visibility state is not "visible", return.
- « `accelerometer$l, `gyroscope$l » を成す ~EACH( %施策 ) に対し ⇒ ~IF[ %文書 には %施策 と命名された`施策により制御される特能$の`利用は許容されて$いない ] ⇒ ~RET ◎ For each policy of « "accelerometer", "gyroscope" »: • If document is not allowed to use the policy-controlled feature named policy, return.
- %~top-level辿可能 ~LET %~window に`対応する~navigable$の`~top-level辿可能$nav ◎ Let topLevelTraversable be window’s navigable's top-level traversable.
- %~platform線形~加速度 ~LET ~NULL ◎ Let platformLinearAcceleration be null.
- %~virtual~sensor ~LET %~top-level辿可能 の`~virtual~sensor対応付け$[ `linear-acceleration^l ] ◎ ↓
- ~IF[ %~virtual~sensor ~NEQ ε ]~AND[ %~virtual~sensor の`読取りを供せるか$vS ~EQ ~T ] ⇒ %~platform線形~加速度 ~SET %~virtual~sensor に供された最新な読取り ◎ If topLevelTraversable’s virtual sensor mapping contains "linear-acceleration": • Let virtualSensor be topLevelTraversable’s virtual sensor mapping["linear-acceleration"]. • If virtualSensor’s can provide readings flag is true, then set platformLinearAcceleration to the latest readings provided to virtualSensor.
- ~ELIF[ 実装は`線形~加速度$を供せる ] ⇒ %~platform線形~加速度 ~SET 当の~deviceの[ ~X, ~Y, ~Z ]軸~~方向の`線形~加速度$ ◎ Otherwise, if the implementation is able to provide linear acceleration: • Set platformLinearAcceleration to the device’s linear acceleration along the X, Y and Z axes.
- %加速度 ~LET ~NULL ◎ Let acceleration be null.
-
~IF[ %~platform線形~加速度 ~NEQ ~NULL ]: ◎ If platformLinearAcceleration is not null:
- %加速度 ~SET `新たな~obj$( `DeviceMotionEventAcceleration$I, %~window の`~realm$gL ) ◎ Set acceleration to a new DeviceMotionEventAcceleration created in window’s realm.
- ~IF[ %~platform線形~加速度 は~X軸~~方向の`線形~加速度$ %~x加速度 を供せる ] ⇒ %加速度 の`~x軸~加速度$ ~SET 精度 0.1 m/s~pow2 までに制限された %~x加速度 ◎ Set acceleration’s x axis acceleration to platformLinearAcceleration’s value along the X axis, or null if it cannot be provided. ◎ If acceleration’s x axis acceleration is not null, limit its precision to no more than 0.1 m/s2.
- ~IF[ %~platform線形~加速度 は~Y軸~~方向の`線形~加速度$ %~y加速度 を供せる ] ⇒ %加速度 の`~y軸~加速度$ ~SET 精度 0.1 m/s~pow2 までに制限された %~y加速度 ◎ Set acceleration’s y axis acceleration to platformLinearAcceleration’s value along the Y axis, or null if it cannot be provided. ◎ If acceleration’s y axis acceleration is not null, limit its precision to no more than 0.1 m/s2.
- ~IF[ %~platform線形~加速度 は~Z軸~~方向の`線形~加速度$ %~z加速度 を供せる ] ⇒ %加速度 の`~z軸~加速度$ ~SET 精度 0.1 m/s~pow2 までに制限された %~z加速度 ◎ Set acceleration’s z axis acceleration to platformLinearAcceleration’s value along the Z axis, or null if it cannot be provided. ◎ If acceleration’s z axis acceleration is not null, limit its precision to no more than 0.1 m/s2.
- %~platform重力を伴う加速度 ~LET ~NULL ◎ Let platformAccelerationIncludingGravity be null.
- %~virtual~sensor ~LET %~top-level辿可能 の`~virtual~sensor対応付け$[ `accelerometer^l ] ◎ ↓
- ~IF[ %~virtual~sensor ~NEQ ε ]~AND[ %~virtual~sensor の`読取りを供せるか$vS ~EQ ~T ] ⇒ %~platform重力を伴う加速度 ~SET %~virtual~sensor に供された最新な読取り ◎ If topLevelTraversable’s virtual sensor mapping contains "accelerometer": • Let virtualSensor be topLevelTraversable’s virtual sensor mapping["accelerometer"]. • If virtualSensor’s can provide readings flag is true, then set platformAccelerationIncludingGravity to the latest readings provided to virtualSensor.
- ~ELIF[ 実装は`重力を伴う加速度$を供せる ] ⇒ %~platform重力を伴う加速度 ~SET 当の~deviceの[ ~X, ~Y, ~Z ]軸~~方向の`線形~加速度$ ◎ Otherwise, if the implementation is able to provide acceleration with gravity: • Set platformAccelerationIncludingGravity to the device’s linear acceleration along the X, Y and Z axes.
- %重力を伴う加速度 ~LET ~NULL ◎ Let accelerationIncludingGravity be null.
-
~IF[ %~platform重力を伴う加速度 ~NEQ ~NULL ]: ◎ If platformAccelerationIncludingGravity is not null:
- %重力を伴う加速度 ~SET `新たな~obj$( `DeviceMotionEventAcceleration$I, %~window の`~realm$gL ) ◎ Set accelerationIncludingGravity to a new DeviceMotionEventAcceleration created in window’s realm.
- ~IF[ %~platform重力を伴う加速度 は~X軸~~方向の値 %~x加速度 を供せる ] ⇒ %重力を伴う加速度 の`~x軸~加速度$ ~SET 精度 0.1 m/s~pow2 までに制限された %~x加速度 ◎ Set accelerationIncludingGravity’s x axis acceleration to platformAccelerationIncludingGravity’s value along the X axis, or null if it cannot be provided. ◎ If accelerationIncludingGravity’s x axis acceleration is not null, limit its precision to no more than 0.1 m/s2.
- ~IF[ %~platform重力を伴う加速度 は~Y軸~~方向の値 %~y加速度 を供せる ] ⇒ %重力を伴う加速度 の`~y軸~加速度$ ~SET 精度 0.1 m/s~pow2 までに制限された %~y加速度 ◎ Set accelerationIncludingGravity’s y axis acceleration to platformAccelerationIncludingGravity’s value along the Y axis, or null if it cannot be provided. ◎ If accelerationIncludingGravity’s y axis acceleration is not null, limit its precision to no more than 0.1 m/s2.
- ~IF[ %~platform重力を伴う加速度 は~Z軸~~方向の値 %~z加速度 を供せる ] ⇒ %重力を伴う加速度 の`~z軸~加速度$ ~SET 精度 0.1 m/s~pow2 までに制限された %~z加速度 ◎ Set accelerationIncludingGravity’s z axis acceleration to platformAccelerationIncludingGravity’s value along the Z axis, or null if it cannot be provided. ◎ If accelerationIncludingGravity’s z axis acceleration is not null, limit its precision to no more than 0.1 m/s2.
- %~platform回転~率 ~LET ~NULL ◎ Let platformRotationRate be null.
- %~virtual~sensor ~LET %~top-level辿可能 の`~virtual~sensor対応付け$[ `gyroscope^l ] ◎ ↓
- ~IF[ %~virtual~sensor ~NEQ ε ]~AND[ %~virtual~sensor の`読取りを供せるか$vS ~EQ ~T ] ⇒ %~platform回転~率 ~SET %~virtual~sensor に供された最新な読取り ◎ If topLevelTraversable’s virtual sensor mapping contains "gyroscope": • Let virtualSensor be topLevelTraversable’s virtual sensor mapping["gyroscope"]. • If virtualSensor’s can provide readings flag is true, then set platformRotationRate to the latest readings provided to virtualSensor.
- ~ELIF[ 実装は`回転~率$を供せる ] ⇒ %~platform回転~率 ~SET 当の~deviceの[ ~X, ~Y, ~Z ]軸~周りの`回転~率$ ◎ Otherwise, if the implementation is able to provide rotation rate: • Set platformRotationRate to the device’s rotation rate about the X, Y and Z axes.
- %回転~率 ~LET ~NULL ◎ Let rotationRate be null.
-
~IF[ %~platform回転~率 ~NEQ ~NULL ]: ◎ If platformRotationRate is not null:
- %回転~率 ~SET `新たな~obj$( `DeviceMotionEventRotationRate$I, %~window の`~realm$gL ) ◎ Set rotationRate to a new DeviceMotionEventRotationRate created in window’s realm.
- ~IF[ %~platform回転~率 は~X軸~周りの`回転~率$ %~x回転~率 を供せる ] ⇒ %回転~率 の`~x軸~回転~率$ ~SET 精度 0.1 deg/s までに制限された %~x回転~率 ◎ Set rotationRate’s x axis rotation rate to platformRotationRate’s value about the X axis, or null if it cannot be provided. ◎ If rotationRate’s x axis rotation rate is not null, limit its precision to no more than 0.1 deg/s.
- ~IF[ %~platform回転~率 は~Y軸~周りの`回転~率$ %~y回転~率 を供せる ] ⇒ %回転~率 の`~y軸~回転~率$ ~SET 精度 0.1 deg/s までに制限された %~y回転~率 ◎ Set rotationRate’s y axis rotation rate to platformRotationRate’s value about the Y axis, or null if it cannot be provided. ◎ If rotationRate’s y axis rotation rate is not null, limit its precision to no more than 0.1 deg/s.
- ~IF[ %~platform回転~率 は~Z軸~周りの`回転~率$ %~z回転~率 を供せる ] ⇒ %回転~率 の`~z軸~回転~率$ ~SET 精度 0.1 deg/s までに制限された %~z回転~率 ◎ Set rotationRate’s z axis rotation rate to platformRotationRate’s value about the Z axis, or null if it cannot be provided. ◎ If rotationRate’s z axis rotation rate is not null, limit its precision to no more than 0.1 deg/s.
- %環境 ~LET %~window に`関連な設定群~obj$ ◎ Let environment be window’s relevant settings object.
-
この段は`並列的$に走らす: ◎ Run these steps in parallel:
-
« `accelerometer$l, `gyroscope$l » を成す ~EACH( %許可~名 ) に対し: ◎ For each permission in « "accelerometer", "gyroscope" »:
- %状態 ~LET `現在の許可~状態を取得する$( %許可~名, %環境 ) ◎ Let state be the result of getting the current permission state with permission and environment.
- ~IF[ %状態 ~NEQ `granted$l ] ⇒ ~RET ◎ If state is not "granted", return.
-
`大域~taskを~queueする$( `~deviceの動きと方位~task~source$, %~window, 次の手続き ) ◎ Queue a global task on the device motion and orientation task source given window to run\
手続きは ⇒ `~eventを発火する$( %~window, `devicemotion$et, `DeviceMotionEvent$I ) — 次のように初期化して `DeviceMotionEvent^I0 ⇒# `acceleration$m 属性 ~SET %加速度, `accelerationIncludingGravity$m 属性 ~SET %重力を伴う加速度, `rotationRate$m 属性 ~SET %回転~率, `interval$m 属性 ~SET %~interval ◎ the following steps: • Fire an event named "devicemotion" at window, using DeviceMotionEvent, with the acceleration attribute initialized to acceleration, the accelerationIncludingGravity attribute initialized to accelerationIncludingGravity, the rotationRate attribute initialized to rotationRate, and the interval attribute initialized to interval.
-
実装は、 動き情報を まったく供せない場合でも,~eventを発火するベキである — 次に挙げる属性をすべて ~NULL に設定した上で ⇒# `acceleration$m, `accelerationIncludingGravity$m, `rotationRate$m ◎ If an implementation can never provide motion information, the event should be fired with the acceleration, accelerationIncludingGravity and rotationRate attributes set to null.
7. ~security/~privacyの考慮点
この仕様に定義される~APIは、[ 加速度計, ~gyroscope, 磁力計 ]などの~hardware~sensorからの情報を得するために利用できる。 供される~dataは、 敏感であり,悪意的な~web~pageによる攻撃の~subjectになり得るものと考えられている。 [ 加速度計, ~gyroscope, 磁力計 ]の較正は、 特定0の~sensor~hardwareについての持続的な詳細を露呈し得る `SENSORID$r 。 主な攻撃~行路は、 次に分類できる: ◎ The API defined in this specification can be used to obtain information from hardware sensors, such as accelerometer, gyroscope and magnetometer. Provided data may be considered as sensitive and could become a subject of attack from malicious web pages. The calibration of accelerometers, gyroscopes and magnetometers may reveal persistent details about the particular sensor hardware [SENSORID]. The main attack vectors can be categorized into following categories:
- 利用者~入力の監視 `TOUCH$r ◎ Monitoring of a user input [TOUCH]
- 所在の追跡 `INDOORPOS$r ◎ Location tracking [INDOORPOS]
- 利用者の識別 `FINGERPRINT$r ◎ User identification [FINGERPRINT]
それを踏まえて、 実装は,[ 当の~web~pageによる~sensorの利用を徴す視覚的な指示子 ]を考慮してもヨイ。 加えて,この仕様は、 次について,利用者が~UAに対し`許可を表出する$ことを要求する ⇒ `requestPermission()$m の~callを介して,~deviceの[ 動き/方位 ]~dataを作者に供する ◎ In light of that, implementations may consider visual indicators to signify the use of sensors by the web page. Additionally, this specification requires users to give express permission for the user agent to provide device motion and/or orientation data via the requestPermission() API calls.
加えて,[ ~privacy~risk, 指紋収集, その他の攻撃 ]の機会cを最小限にするため、 実装が この仕様に定義される~eventを発火するのは, ~AND↓ を満たす場合に限るモノトスル: ◎ Furthermore, to minimize privacy risks, the chance of fingerprinting and other attacks the implementations must:
-
~AND↓ を満たす`~navigable$ %~navigable が在る
- 当の~eventの`~target$ ~EQ %~navigable にて`作動中な~window$nav
- %~navigable にて`作動中な文書$nav ~NEQ ~NULL 【この条件は、この訳による補完】
- %~navigable にて`作動中な文書$navの`可視性~状態$doc ~EQ `visible^l
- %~navigable に`関連な設定群~obj$は`~secureな文脈$enVである
- `§ 許可@#permissions-integration$ を実装する — `子~navigable$(非同一-生成元なものも含む)に対し~eventを発火するのは、 `~top-level辿可能$により許容される場合に限るよう。 ◎ ↑
- これまでの各節に述べたとおり,属性~値の精度を制限する。 ◎ limit precision of attribute values as described in the previous sections.
加えて、 そのように実装することは, 携帯~deviceの~battery寿命にも~~有益になろう。 ◎ Additionally, implementing these items may also have a beneficial impact on the battery life of mobile devices.
最大~標本化~頻度~用の上限を知るべく,実装~経験が更に集められている。 ◎ Further implementation experience is being gathered to inform the limit for the maximum sampling frequency cap.
8. ~accessibilityの考慮点
この仕様に定義される~eventは、 画期的な形を成す入力~用に機会を供する — それは、 利用者にとって画期的なヤリトリへの道を開くものになり得る。 アリな限り多くの人々が,作者が築く体験とヤリトリ-可能になることを確保するするためには、 次に挙げるものを考慮されたし: ◎ DeviceOrientation events provide opportunities for novel forms of input, which can open up novel interactions for users. In order to ensure that as many people as possible will be able to interact with the experiences you build, please consider the following:
-
要求される~gestureを為せない人々にも,別の仕方でヤリトリできるよう、 入力を供する代替な手段を可用にすることは重要である。 例えば、 身体的な障害を抱える人々や, 眼や頭の~~動き( `eye gaze, or head-tracking^en )による入力を利用する人々。 ◎ It is important for alternative means of providing input to be available, so that people who cannot make the required gestures have another way to interact. Examples may include people with dexterity-related disabilities, or people who use eye gaze, or head-tracking input.
- ~game用には、 代替なヤリトリ~methodとして,[ ~game~controller/~keyboard/~mouse入力 ]も~supportすることを考慮すること。 ◎ For games, consider supporting either game controller, keyboard or mouse input as alternative interaction methods.
- ~web~app用には、 その機能を遂行するためとして,[ ~button/ ~menu~command/ ~keyboard~shortcut ]などの~UIも供することを考慮すること。 ◎ For web apps, consider providing UI, such as a button, menu command, and/or keyboard shortcut, to perform the function.
- 利用者が偶発的な入力をやり直せることは、 本質的である — これは特に,振戦を抱える人々に関連するであろう。 ◎ It is essential that users can undo any accidental input - this may be particularly relevant for people with tremors.
利用者の必要性として発生し得る,次に挙げる 2 つは、 ~UAあるいは下層の~OSにより管理される見込みが高い。 しかしながら、 これらの考慮点は,[ 内容/~app ]が利用され得る仕方を表現するので、 作者も,これらを念頭に置くことは助けになろう。 ◎ There are two user needs that can arise, which would likely be managed by the user agent, or underlying operating system. However, it can be helpful to bear these considerations in mind, as they represent ways that your content or app may be used.
-
~gestureや動きに基づく入力の利用を利用者が不能化できることは、 重要である。 ~web~appは、 この入力を給するために, 利用者~向けに適切な~access可能な手段 — ~buttonなど — を供するベキである。 ◎ It is important that the user is able to disable the use of gesture or motion-based input. The web app should provide an appropriate accessible means for the user to supply this input, such as a button.
- 例えば, `shake-to-undo^en 【振ったら~~元に戻す】特能は, 自然かつ~~親切なヤリトリを供し得る一方で、 振戦を抱える一部の人々にとっては,障壁にもなり得る。 これは、 許可を辞退するか,より見込みが高い[ ~browser/~OS ]の設定を変更することにより — ~web~appが代替な入力~手段を供することと併せて — 管理することもできる。 ◎ For example: whilst the shake-to-undo feature can provide a natural and thoughtful interaction for some, for people with tremors, it may present a barrier. This could be managed by declining permission, or more likely by changing a browser or OS setting, coupled with the web app providing alternative input means.
- ~deviceの方位を~lockできることも重要である — それは、 電話などの~touch~deviceで手元を見ずにヤリトリしている誰かにとって,首な利用事例になる。 彼らは,所与の方位において各~要素が~screen上のどこにあるかを体で覚えることもあり、 ~layoutにズレが生じると,彼らが~navigateする能を損なうことになろう。 これも、 ~OS~levelで行われる見込みが最も高い。 ◎ It is also important that the device’s orientation can be locked - a primary use case being someone who is interacting with a touch device, such as a phone, non-visually. They may have built up 'muscle memory' as to where elements are on the screen in a given orientation, and having the layout shift would break their ability to navigate. Again, this would most likely be done at the operating system level.
9. 自動化
この特能は、 実装~経験が限定的であることに因り,`~risk下$にある。 ◎ This feature is at risk due to limited implementation experience.
この仕様は、 ~test作者に難題を突きつけ得る — この仕様に定義される各種~eventは、[ 読取りを容易に制御できない物理的な~hardware ]が在ることに依存するので。 ◎ This specification can pose a challenge to test authors, as the events defined here depend on the presence of physical hardware whose readings cannot be easily controlled.
この難題に取組むため、 この文書は,[ `WEBDRIVER2$r による`拡張~command$ ]と[ `GENERIC-SENSOR$r `§ 自動化@~SENSORS#automation$ により敷かれた基盤 ]の上に築かれる。 別々な`拡張~command$を伴う,完全に[ 新たな, 独立な ]基盤を開発する選択肢もあったが、 これが選ばれたのは、 これら 2 つの仕様は,有意に重合するからである — `GENERIC-SENSOR$r 仕様を~testすることにおいて,類似な難題が在ることのみならず、 派生する多くの~API(例: `GYROSCOPE$r )が,類似な情報を得して供することにおいて。 ◎ To address this challenge, this document builds upon the [WEBDRIVER2] extension commands and infrastructure laid out by Generic Sensor API § 9 Automation. This was chosen over the option of developing completely new and independent infrastructure with separate extension commands because there is significant overlap between the two specifications: not only does testing the [GENERIC-SENSOR] specification present similar challenges, but many derived APIs (e.g. [GYROSCOPE]) obtain and provide similar information.
この仕様が実装に~supportするよう要求するのは、 `GENERIC-SENSOR$r `§ 自動化@~SENSORS#automation$ に限られる — その【そこから派生する】各種[ ~interface, ~event ]ではなく。 ◎ This specification only requires implementations to support the Generic Sensor API § 9 Automation section of the [GENERIC-SENSOR] specification, not its interfaces and events.
9.1. ~device方位の自動化
`deviceorientation$et ~event用の自動化の~supportは、[ 加速度計, ~gyroscope, 任意選択で磁力計 ]を表現する~virtual~sensorの上に築かれる。 ◎ Automation support for the deviceorientation event is built upon virtual sensors that represent accelerometers, gyroscopes and, optionally, magnetometers.
~UAにより~platformから検索取得される方位~dataは、[ 加速度計, ~gyroscope, 任意選択で磁力計 ]から来る。 しかしながら,動き~dataとは違って、 これらの より低-~levelな読取りは,[ `§ ~device方位@#device-orientation-model$ にて述べられる定式化に従って,`~Euler角度$に変形する ]モノトスル。 さらには、 ~platformは,~~追加な~APIとして[ 生な[ 加速度, 回転 ]~dataから それらの変換のうち一部をすでに遂行するもの ]を~UAに供するかもしれない。 ◎ Orientation data retrieved from the platform by the user agent comes from accelerometers, gyroscopes and, optionally, magnetometers. Contrary to motion data, however, these lower-level readings must be transformed into Euler angles in the formation described in § 3.1 Device Orientation. Furthermore, the platform might provide extra APIs to the user agent that already perform some of those conversions from raw acceleration and rotation data.
したがって、 実装(および自動化の利用者)に対し[ 方位~読取りを より低-~levelな~virtual~sensorを介して供する (それは、 異なる単位による測定を利用する) ]ことを要求する代わりに、 この仕様は、[ 相対 `and^en【?】 方位 ]~data用の~~追加な`~virtual~sensor型$を[ この仕様により利用される形式 ]で定義する。 ◎ Therefore, instead of requiring implementations (and automation users) to provide orientation readings via lower-level virtual sensors which use different units of measurement, this specification defines extra virtual sensor types for relative and orientation data in the format used by this specification.
9.1.1. 方位~data読取りを構文解析する~algo
`方位~data読取りを構文解析する@ ときは、 所与の ( ~JSON `Object$jt %~parameter群 ) に対し: ◎ To perform the parse orientation data reading algorithm, given a JSON Object parameters:
- %~alpha ~LET %~parameter群 から`~propを取得する$( `alpha^l ) ◎ Let alpha be the result of invoking get a property from parameters with "alpha".
- ~IF[ %~alpha は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If alpha is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- ~IF[ %~alpha ~LT 0 ]~OR[ %~alpha ~GTE 360 ] ⇒ ~RET `undefined^jv ◎ If alpha is not in the range [0, 360), then return undefined.
- %~beta ~LET %~parameter群 から`~propを取得する$( `beta^l ) ◎ Let beta be the result of invoking get a property from parameters with "beta".
- ~IF[ %~beta は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If beta is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- ~IF[ %~beta ~LT −180 ]~OR[ %~beta ~GTE 180 ] ⇒ ~RET `undefined^jv ◎ If beta is not in the range [-180, 180), then return undefined.
- %~gamma ~LET %~parameter群 から`~propを取得する$( `gamma^l ) ◎ Let gamma be the result of invoking get a property from parameters with "gamma".
- ~IF[ %~gamma は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If gamma is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- ~IF[ %~gamma ~LT −90 ]~OR[ %~gamma ~GTE 90 ] ⇒ ~RET `undefined^jv ◎ If gamma is not in the range [-90, 90), then return undefined.
- ~RET «[ `alpha^l → %~alpha, `beta^l → %~beta, `gamma^l → %~gamma ]» ◎ Return a new ordered map «[ "alpha" → alpha, "beta" → beta, "gamma" → gamma ]».
注記: 返り値は、 `~sensor読取り$の概念 `GENERIC-SENSOR$r に依存しないようにするため,`有順序~map$であるが、 上の~algoの目的においては【~sensor読取りと】交換可能になるべきである。 ◎ Note: The return value is a ordered map to prevent a dependency on the sensor reading concept from the [GENERIC-SENSOR] specification. They should be interchangeable for the purposes of the algorithm above.
9.1.2. `absolute-orientation^l ~virtual~sensor型
`型ごとの~virtual~sensor~metadata$は、 次の`~entry$mapを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have the following entry:
- `~key$map ◎ Key
- `absolute-orientation@vsT ◎ "absolute-orientation"
- `値$map ◎ Value
- ある`~virtual~sensor~metadata$ — その`読取り構文解析~algo$vsMは ⇒ `方位~data読取りを構文解析する$ ◎ A virtual sensor metadata whose reading parsing algorithm is parse orientation data reading.
9.1.3. `relative-orientation^l ~virtual~sensor型
`型ごとの~virtual~sensor~metadata$は、 次の`~entry$mapを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have the following entry:
- `~key$map ◎ Key
- `relative-orientation@vsT ◎ "relative-orientation"
- `値$map ◎ Value
- ある`~virtual~sensor~metadata$ — その`読取り構文解析~algo$vsMは ⇒ `方位~data読取りを構文解析する$ ◎ A virtual sensor metadata whose reading parsing algorithm is parse orientation data reading.
9.2. ~deviceの動きの自動化
~UAにより~platformから検索取得される動き~dataは[ 加速度計, ~gyroscope ]から来る。 この仕様は、 `型ごとの~virtual~sensor~metadata$を成すある種の~entryを定義する — それらは、 `ACCELEROMETER$r, `GYROSCOPE$r と共有される。 ◎ The motion data retrieved from the platform by the user agent comes from accelerometers and gyroscopes. This specification defines certain per-type virtual sensor metadata entries that are shared with the [ACCELEROMETER] and [GYROSCOPE] specifications.
[ 加速度計/線形~加速度/~gyroscope ]用の~virtual~sensorは、[ `重力を伴う加速度$/ `線形~加速度$/ `回転~率$ ]の~dataを~platformに供するために利用される。 ◎ Accelerometer virtual sensors are used to provide acceleration with gravity data to the platform. Linear Acceleration virtual sensors are used to provide linear acceleration data to the platform. Gyroscope virtual sensors are used to provide rotation rate data to the platform.
9.2.1. `accelerometer^l ~virtual~sensor型
`型ごとの~virtual~sensor~metadata$は、 次の`~entry$mapを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have the following entry:
- `~key$map ◎ Key
- `accelerometer@vsT ◎ "accelerometer"
- `値$map ◎ Value
- ある`~virtual~sensor~metadata$ — その`読取り構文解析~algo$vsMは ⇒ `~xyzの読取りを構文解析する$ ◎ A virtual sensor metadata whose reading parsing algorithm is parse xyz reading.
9.2.2. `linear-acceleration^l ~virtual~sensor型
`型ごとの~virtual~sensor~metadata$は、 次の`~entry$mapを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have the following entry:
- `~key$map ◎ Key
- `linear-acceleration@vsT ◎ "linear-acceleration"
- `値$map ◎ Value
- ある`~virtual~sensor~metadata$ — その`読取り構文解析~algo$vsMは ⇒ `~xyzの読取りを構文解析する$ ◎ A virtual sensor metadata whose reading parsing algorithm is parse xyz reading.
9.2.3. `gyroscope^l ~virtual~sensor型
`型ごとの~virtual~sensor~metadata$は、 次の`~entry$mapを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have the following entry:
- `~key$map ◎ Key
- `gyroscope@vsT ◎ "gyroscope"
- `値$map ◎ Value
- ある`~virtual~sensor~metadata$ — その`読取り構文解析~algo$vsMは ⇒ `~xyzの読取りを構文解析する$ ◎ A virtual sensor metadata whose reading parsing algorithm is parse xyz reading.
例
◎非規範的 【! All equations in this section are created using MathJAX and are provided @ http://jsfiddle.net/richtr/w7Xgu/ 】~compass-headingの計算-法
◎非規範的以下に作業した例は、 `deviceorientation$et ~eventの利用者~向けの~~参考として意図されている。 ◎ The following worked example is intended as an aid to users of the DeviceOrientation event.
`§ 序論@#introduction$ では、 ~deviceの~screenが水平なときに~compass-headingを得する, `deviceorientation$et ~eventの用例を供した。 この例では、 利用者が対面して握っている~deviceの~screenが近似的に直立しているとき, ~deviceの~compass-headingを決定する方法を示す。 これの応用は、 現実拡張~systemである。 ◎ Introduction section provided an example of using the DeviceOrientation event to obtain a compass heading when the device is held with the screen horizontal. This example shows how to determine the compass heading that the user is facing when holding the device with the screen approximately vertical in front of them. An application of this is an augmented-reality system.
ここでの~deviceの~compass-headingとは、 精確には,[ ~deviceの~screenに~~直交し,~screenの背面から先を指す~vector ]の水平~成分である。 ◎ More precisely, we wish to determine the compass heading of the horizontal component of a vector which is orthogonal to the device’s screen and pointing out of the back of the screen.
%v は、 回転された~device座標~frame【!device body frame】(~xyz)における,この~vectorを表現するとする: ◎ If v represents this vector in the rotated device body frame xyz, then v is as follows. • v = [0; 0; -1]
~z軸~周りの回転に因る座標系変換は、 次の回転~行列 %Z で表現できる: ◎ The transformation of v due to the rotation about the z axis can be represented by the following rotation matrix. • Z = [cos(alpha) -sin(alpha) 0; sin(alpha) cos(alpha) 0; 0 0 1]
~x軸~周りの回転に因る座標系変換は、 次の回転~行列 %X で表現できる: ◎ The transformation of v due to the rotation about the x axis can be represented by the following rotation matrix. • X = [1 0 0; 0 cos(beta) -sin(beta); 0 sin(beta) cos(beta)]"
~y軸~周りの回転に因る座標系変換は、 次の回転~行列 %Y で表現できる: ◎ The transformation of v due to the rotation about the y axis can be represented by the following rotation matrix. • Y = [cos(gamma) 0 sin(gamma); 0 1 0; -sin(gamma) 0 cos(gamma)]
%R は、 基準~座標~frame【!earth frame】(~XYZ)における~deviceの全部的な回転~行列を表現するとする。 初期の~device座標~frame【!body frame】は基準~座標~frame【!earth frame】に揃えられているので、[ %R ~EQ %Z ~MUL %X ~MUL %Y ]であり,その結果は: ◎ If R represents the full rotation matrix of the device in the earth frame XYZ, then since the initial body frame is aligned with the earth, R is as follows. • R = ZXY = [[cos(alpha) cos(gamma)-sin(alpha) sin(beta) sin(gamma), -cos(beta) sin(alpha), cos(gamma) sin(alpha) sin(beta)+cos(alpha) sin(gamma)], [cos(gamma) sin(alpha)+cos(alpha) sin(beta) sin(gamma), cos(alpha) cos(beta), sin(alpha) sin(gamma)-cos(alpha) cos(gamma) sin(beta)], [-cos(beta) sin(gamma), sin(beta), cos(beta) cos(gamma)]]
%V は基準~座標~frame【!earth frame】(~XYZ)における~vector %v を表現するとする。 [ 【!equation5a】 %V ~EQ %R ~MUL %v ]であり,その結果は: ◎ If v' represents the vector v in the earth frame XYZ, then since the initial body frame is aligned with the earth, v' is as follows. • v' = Rv • v' = [-cos(alpha)sin(gamma)-sin(alpha)sin(beta)cos(gamma); -sin(alpha)sin(gamma)+cos(alpha)sin(beta)cos(gamma); -cos(beta)cos(gamma)]
%θ は~compass-headingを表すとするとき、[ %β, %γ とも 0 ]ではないとするなら[ %θ ~EQ `arctan^op( ( %V の~x成分 ) ~DIV ( %V の~y成分 ) ) ]であり,その結果は 【!equation6】 ⇒ %θ ~EQ `arctan^op( ( −`cos^op(%α)`sin^op(%γ) − `sin^op(%α)`sin^op(%β)`cos^op(%γ) ) ~DIV ( −`sin^op(%α)`sin^op(%γ) + `cos^op(%α)`sin^op(%β)`cos^op(%γ) ) ) ◎ The compass heading θ is given by • theta = atan((v’_x)/(v’_y)) = atan((-cos(alpha)sin(gamma)-sin(alpha)sin(beta)cos(gamma))/(-sin(alpha)sin(gamma)+cos(alpha)sin(beta)cos(gamma))) ◎ provided that β and γ are not both zero.
上による~compass-headingの計算は、 ~JSでは次のように表現できる — 供された各~parameterが定義されていて( ~NULLでない),かつ絶対~方位( `absolute^m ~EQ ~T )を表現するならば,正しい~compass-headingを返す。 ◎ The compass heading calculation above can be represented in JavaScript as follows to return the correct compass heading when the provided parameters are defined, not null and represent absolute values.
var %degtorad = Math.PI / 180; /* 度d ↔ ~radian 間の換算~用 ◎ Degree-to-Radian conversion */ function compassHeading( %alpha, %beta, %gamma ) { var %_x = %beta ? %beta * %degtorad : 0; // %β 値 var %_y = %gamma ? %gamma * %degtorad : 0; // %γ 値 var %_z = %alpha ? %alpha * %degtorad : 0; // %α 値 var %cX = Math.cos( %_x ); var %cY = Math.cos( %_y ); var %cZ = Math.cos( %_z ); var %sX = Math.sin( %_x ); var %sY = Math.sin( %_y ); var %sZ = Math.sin( %_z ); /* %V の~x, ~y成分を計算する ◎ Calculate Vx and Vy components */ var %Vx = - %cZ * %sY - %sZ * %sX * %cY; var %Vy = - %sZ * %sY + %cZ * %sX * %cY; /* ~compass-headingを計算する ◎ Calculate compass heading */ var %compassHeading = Math.atan( %Vx / %Vy ); /* ~compass-headingを, 0 以上 2 π 未満に換算する ◎ Convert compass heading to use whole unit circle */ if( %Vy < 0 ) { %compassHeading += Math.PI; } else if( %Vx < 0 ) { %compassHeading += 2 * Math.PI; } return %compassHeading * ( 180 / Math.PI ); /* 度dによる~compass-heading ◎ Compass Heading (in degrees) */ }
整合性~検査として, %γ を 0 に設定した場合、 %θ は,期待されるとおり 【!equation7】 ⇒# %θ ~EQ `arctan^op( −`sin^op(%α)`sin^op(%β) ~DIV `cos^op(%α)`sin^op(%β) ) ~EQ `arctan^op( −`sin^op(%α) ~DIV `cos^op(%α) ) ~EQ −%α ◎ As a consistency check, if we set γ = 0, then • theta = atan(-sin(alpha)sin(beta)/cos(alpha)sin(beta)) = -alpha ◎ as expected.
代替の整合性~検査として, %β を 90 に設定した場合【すなわち,本体は直立している】、 %θ は,期待されるとおり 【!equation8a, equation8b】 ⇒# %θ ~EQ `arctan^op( ( −`cos^op(%α)`sin^op(%γ) − `sin^op(%α)`cos^op(%γ) ) ~DIV ( −`sin^op(%α)`sin^op(%γ) + `cos^op(%α)`cos^op(%γ) ) ) ~EQ `arctan^op( −`sin^op(%α+%γ) ~DIV `cos^op(%α+%γ) ) ~EQ −(%α+%γ) ◎ Alternatively, if we set β = 90, then • theta = atan((-cos(alpha)sin(gamma)-sin(alpha)cos(gamma))/(-sin(alpha)sin(gamma)+cos(alpha)cos(gamma))) • theta = atan(-sin(alpha+gamma)/cos(alpha+gamma)) = -(alpha+gamma) ◎ as expected.
~device方位の代替-表現
◎非規範的`~Euler角度$を利用して方位を述べることには、 ~gimbal-lock `GIMBALLOCK$r を導入するなどの欠点もあり得る。 意図される応用に依存して,~device方位を表す値を他の回転~表現に換算する方が有用になり得る。 ◎ Describing orientation using Tait-Bryan angles can have some disadvantages such as introducing gimbal lock [GIMBALLOCK]. Depending on the intended application it can be useful to convert the Device Orientation values to other rotation representations.
方位~用の代替-表現としては、 回転~行列を利用するものが先ず挙げられる。 `§ ~compass-headingの計算-法@#worked-example$にて供した,成分~回転~行列を組合せることにより、 ~device座標~frame【!body frame】の方位を組合せた回転~行列 — その節に述べた %R — 【!equation13a】 として表現できる。 それは、 基準~座標~frame【!earth frame】(~XYZ)からの~deviceの回転~行列を表現する。 ◎ The first alternate orientation representation uses rotation matrices. By combining the component rotation matrices provided in the worked example above we can represent the orientation of the device body frame as a combined rotation matrix. ◎ If R represents the rotation matrix of the device in the earth frame XYZ, then since the initial body frame is aligned with the earth, R is as follows. • R = ZXY = [[cos(alpha) cos(gamma)-sin(alpha) sin(beta) sin(gamma), -cos(beta) sin(alpha), cos(gamma) sin(alpha) sin(beta)+cos(alpha) sin(gamma)], [cos(gamma) sin(alpha)+cos(alpha) sin(beta) sin(gamma), cos(alpha) cos(beta), sin(alpha) sin(gamma)-cos(alpha) cos(gamma) sin(beta)], [-cos(beta) sin(gamma), sin(beta), cos(beta) cos(gamma)]]
この回転~行列は、 ~JSでは,次のように表現できる — 供された各~parameterが定義されていて, ~NULLでなく, `absolute^m 値を表現するならば: ◎ The above combined rotation matrix can be represented in JavaScript as follows provided passed parameters are defined, not null and represent absolute values.
var %degtorad = Math.PI / 180; /* 度d ↔ ~radian 間の換算~用 ◎ Degree-to-Radian conversion */ function getRotationMatrix( alpha, %beta, %gamma ) { var %_x = %beta ? %beta * %degtorad : 0; // %β 値 var %_y = %gamma ? %gamma * %degtorad : 0; // %γ 値 var %_z = %alpha ? %alpha * %degtorad : 0; // %α 値 var %cX = Math.cos( %_x ); var %cY = Math.cos( %_y ); var %cZ = Math.cos( %_z ); var %sX = Math.sin( %_x ); var %sY = Math.sin( %_y ); var %sZ = Math.sin( %_z ); /* ZXY 回転~行列の構築 ◎ ZXY rotation matrix construction. */ var %m11 = %cZ * %cY - %sZ * %sX * %sY; var %m12 = - %cX * %sZ; var %m13 = %cY * %sZ * %sX + %cZ * %sY; var %m21 = %cY * %sZ + %cZ * %sX * %sY; var %m22 = %cZ * %cX; var %m23 = %sZ * %sY - %cZ * %cY * %sX; var %m31 = - %cX * %sY; var %m32 = %sX; var %m33 = %cX * %cY; return [ %m11, %m12, %m13, %m21, %m22, %m23, %m31, %m32, %m33 ]; };
~device方位~data用には、 四元数 `QUATERNIONS$r による代替-表現もある。 ◎ Another alternate representation of device orientation data is as Quaternions. [QUATERNIONS]
%q ~EQ ( %w, %x, %y, %z ) は、 基準~座標~frame【!earth frame】(~XYZ) における~deviceの単位~四元数を表現するとする。 初期の~device座標~frame【!body frame】は基準~座標~frame【!earth】に揃えられているので、 %q は次のようになる 【!equation14】 ⇒# %w ~EQ `cos^op( %b ) `cos^op( %c ) `cos^op( %a ) ~MINUS `sin^op( %b ) `sin^op( %c ) `sin^op( %a ), %x ~EQ `sin^op( %b ) `cos^op( %c ) `cos^op( %a ) ~MINUS `cos^op( %b ) `sin^op( %c ) `sin^op( %a ), %y ~EQ `cos^op( %b ) `sin^op( %c ) `cos^op( %a ) ~PLUS `sin^op( %b ) `cos^op( %c ) `sin^op( %a ), %z ~EQ `cos^op( %b ) `cos^op( %c ) `sin^op( %a ) ~PLUS `sin^op( %b ) `sin^op( %c ) `cos^op( %a )
ここで ⇒# ( %a, %b, %c ) ~EQ ( %α ~DIV 2, %β ~DIV 2, %γ ~DIV 2 )
◎ If q represents the unit quaternion of the device in the earth frame XYZ, then since the initial body frame is aligned with the earth, q is as follows. • q = [[q_w], [q_x], [q_y], [q_z]] = [[cos(beta)cos(gamma)cos(alpha) - sin(beta)sin(gamma)sin(alpha)], [sin(beta)cos(gamma)cos(alpha) - cos(beta)sin(gamma)sin(alpha)], [cos(beta)sin(gamma)cos(alpha) + sin(beta)cos(gamma)sin(alpha)], [cos(beta)cos(gamma)sin(alpha) + sin(beta)sin(gamma)cos(alpha)]]上の四元数は、 ~JSでは,次のように表現できる — 供された~parameterが定義されていて, ~NULLでなく, `absolute^m 値を表現するならば。 ◎ The above quaternion can be represented in JavaScript as follows provided the passed parameters are defined, are absolute values and those parameters are not null.
var %degtorad = Math.PI / 180; /* 度d ↔ ~radian 間の換算~用 ◎ Degree-to-Radian conversion */ function getQuaternion( %alpha, %beta, %gamma ) { var %_x = %beta ? %beta * %degtorad : 0; // %β 値 var %_y = %gamma ? %gamma * %degtorad : 0; // %γ 値 var %_z = %alpha ? %alpha * %degtorad : 0; // %α 値 var %cX = Math.cos( %_x/2 ); var %cY = Math.cos( %_y/2 ); var %cZ = Math.cos( %_z/2 ); var %sX = Math.sin( %_x/2 ); var %sY = Math.sin( %_y/2 ); var %sZ = Math.sin( %_z/2 ); /* ZXY 四元数の構築 ◎ ZXY quaternion construction. */ var %w = %cX * %cY * %cZ - %sX * %sY * %sZ; var %x = %sX * %cY * %cZ - %cX * %sY * %sZ; var %y = %cX * %sY * %cZ + %sX * %cY * %sZ; var %z = %cX * %cY * %sZ + %sX * %sY * %cZ; return [ %w, %x, %y, %z ]; }
単位~四元数が正しく構築されたかどうかは、 `Lagrange^en の四平方定理を利用して検査できる — 結果は,期待されるとおり 1 になる 【!equation18】 ⇒ %w ~pow2 ~PLUS %x ~pow2 ~PLUS %y ~pow2 ~PLUS %z ~pow2 ~EQ 1 ◎ We can check that a Unit Quaternion has been constructed correctly using Lagrange’s four-square theorem • q_w^2 * q_x^2 * q_y^2 * q_z^2 = 1 ◎ as expected.
謝辞
この仕様は、 元々は, 2016年 8月に `勧告候補として公表された@~TR/2016/CR-orientation-event-20160818/$ — 今とは異なる~titleの下で。 それは、 初期~時は `Geolocation ~WG@https://www.w3.org/2008/geolocation/$cite により開発され, その~WGが 2017年に閉鎖された後に一時的に退役した。 `Devices and Sensors ~WG@https://www.w3.org/groups/wg/das/$cite により 2019年に復活された この文書は、 有意な増補 — [ 相互運用能, ~test自動化, ~privacy, 編集上の内容 ]における改善を含む — を経ている ( `§ 変更点@#changes$ を見よ)。 ◎ The Device Orientation and Motion specification, originally published as a Candidate Recommendation in August 2016 under the title DeviceOrientation Event Specification, was initially developed by the Geolocation Working Group. After the group was closed in 2017, the specification was temporarily retired. Revitalized in 2019 by the Devices and Sensors Working Group, this document has undergone significant enhancements including improvements in interoperability, test automation, privacy, and editorial content (see § 10 Changes section).
2024年には、 この仕様は `Devices and Sensors ~WG^cite と `Web Applications ~WG@https://www.w3.org/groups/wg/webapps/$cite との `joint deliverable^en 【`共同成果物@https://www.w3.org/Guide/process/joint-deliverables.html$】 になり,その進行を継続するようになった。 初期~設計の論点は、 この仕様の `GitHub repository@https://github.com/w3c/deviceorientation$en 内には保全されていないが, `Geolocation ~WG^cite の`mailing list archives@https://lists.w3.org/Archives/Public/public-geolocation/$en を通して探究できる。 ◎ In 2024, the Devices and Sensors Working Group partnered with the Web Applications Working Group, making this a joint deliverable and continuing the advancement of the specification. The initial design discussions are preserved not in this GitHub repository but can be explored through the Geolocation Working Group’s mailing list archives.
~W3Cは、 以下に挙げる方々による貢献に感謝する ⇒ `Lars Erik Bolstad, Dean Jackson, Claes Nilsson, George Percivall, Doug Turner, Matt Womer, and Chris Dumez^en ◎ The W3C acknowledges Lars Erik Bolstad, Dean Jackson, Claes Nilsson, George Percivall, Doug Turner, Matt Womer, and Chris Dumez for their contributions.
変更点
この節では、 考査を手引きするため,[ ~~有意な変更点, 注記すべき編集上の改善 ]を要約する。 全部的な詳細は、 `~commit~log@https://github.com/w3c/deviceorientation/commits/main$ にて可用である。 ◎ This section summarizes substantial changes and notable editorial improvements to guide review. Full details are available from the commit log.\
- `2016年 08月 18日 勧告候補@~TR/2016/CR-orientation-event-20160818/$からの変更点 ◎ Changes since the Candidate Recommendation 2016-08-18:
- `§ 許可@#permissions-integration$【!Permissions Policy integration】 を追加した — それは、 それまでの[ `~top-level辿可能$【!top-level frame】と同一-生成元な~navigable【!iframe】に限り~eventを発火する ]としていた要件に取って代わる。 ◎ Add Permissions Policy integration, which supersedes the previous requirement of only firing events on iframes that were same-origin with the top-level frame
- 実装者~向けに,複数の許可~要請を束ねることについて注記を追加した。 ◎ Add note to implementers about bundling permission requests
- 強力な特能[ `accelerometer$l, `gyroscope$l, `magnetometer$l ]を~exportした。 ◎ Export powerful features Accelerometer, Gyroscope and Magnetometer
- `§ 許可@#permissions-integration$【!Permissions API integration】 を追加した。 それに伴い, `requestPermission()^m の利用を要求するようにした。 ◎ Add Permissions API integration, start requiring requestPermission() usage
- 編集上: `§ ~API@#api$ を より規範的に, より多くの用語定義を伴うよう定義した。 ◎ editorial: Define API section more normatively and with more dfns
- 編集上: `§ ~deviceの動き@#device-motion-model$ 内の加速度に関する説明を並替えた。 ◎ editorial: Reorder acceleration explanation in Device Motion Model section
- 編集上: ~deviceの回転と動きについて説明と参照を更新した。 ◎ editorial: Update explanations of the device rotation and motion references
- 編集上: より精確な~event取扱い用語を利用して,他を現代化した。 ◎ editorial: Use more precise event handling terms, modernize others
- 編集上: 方位~変化~eventに代えて `SCREEN-ORIENTATION$r を参照rするようにした。 ◎ editorial: Refer to [SCREEN-ORIENTATION] instead of the orientation change event
- 編集上: `§ ~security/~privacyの考慮点@#security-and-privacy$ における要件を書き直した。 ◎ editorial: Reword requirements in "Security and privacy considerations"
- `§ 利用事例と要件@#use-cases-and-requirements$, `§ 例@#examples$ を規範的でないものと~markした。 ◎ Mark use cases and requirements and examples sections non-normative
- `oncompassneedscalibration^et ~eventを除去した。 ◎ Remove the oncompassneedscalibration event
- “利用者-作動化により誘発され” への参照を “`一過な作動化を有して$” を参照rするよう更新した。 ◎ Update references to "triggered by user activation", now referred to as "transient activation"
- ~eventの発火-法を~DOMによる語句に倣うようにした。 ◎ Align with DOM phrasing on firing events
- `DeviceMotionEvent$I 用の加速度~propについて注記を追加した。 ◎ Add a note about acceleration properties for DeviceMotionEvent
- 座標系が~CSS座標系からどう相違するかについて説明する注記を追加した。 ◎ Add a note explaining how the coordinate system differs from the CSS coordinate system
- `受動的な指紋収集の課題@https://github.com/w3c/deviceorientation/issues/85$ を軽減するため、[ 0.1 deg / 0.1 deg/s / 0.1 m/s~pow2 ]より精確にしないことを要求するようにした。 ◎ Require no more precise than 0.1 degrees, 0.1 degrees per second, 0.1 meters per second squared to mitigate a passive fingerprinting issue
- ~IDL内の構築子~定義を~Web~IDLに倣うよう更新した。 ◎ Update constructor definition in IDL with the Web IDL
- 各~interfaceに明示的な `Exposed^xA 拡張d属性を追加した。 ◎ Add explicit [Exposed] to interfaces
- 辞書~memberの既定~値を~IDL内で設定しておくよう更新した。 ◎ Update IDL dictionaries with new dictionary defaulting setup
- [ `deviceorientationabsolute$et ~event, その `ondeviceorientationabsolute$n ~event~handler~IDL属性 ]の実装~経験は限定的であることを注記した。 ◎ Note the deviceorientationabsolute event and its ondeviceorientationabsolute event handler IDL attribute have limited implementation experience
- [ `DeviceOrientationEvent$I, `DeviceMotionEvent$I ]に静的~演算として `requestPermission()^m ~APIを追加した。 ◎ Add requestPermission() API static operation to both DeviceOrientationEvent and DeviceMotionEvent
- [ `ondeviceorientation$n, `ondevicemotion$n, `ondeviceorientationabsolute$n ]~event~handlerに `SecureContext^xA 拡張d属性を追加した。 ◎ Add [SecureContext] to event handlers ondeviceorientation, ondevicemotion and ondeviceorientationabsolute
- すべての~interfaceを~secureな文脈に制約した。 ◎ Restrict all interfaces to secure contexts
- [ `DeviceAcceleration^I, `DeviceRotationRate^I 【今や廃された?】 ]から `NoInterfaceObject^xA 拡張d属性を除去した。 ◎ Remove [NoInterfaceObject] from DeviceAcceleration and DeviceRotationRate
- `§ ~security/~privacyの考慮点@#security-and-privacy$ を規範的にした。 ◎ Make security and privacy considerations normative
- 注釈文にしか与えていなかった `ondeviceorientationabsolute$n ~event~handler属性を~IDL~blockの中に追加した。 ◎ Add the ondeviceorientationabsolute event handler attribute into the IDL block (was only in prose)
- `DeviceMotionEventInit$I の各~辞書~memberから '`?^c' を除去した。 ◎ Remove '?' from dictionary members of DeviceMotionEventInit
- `Exposed=Window^xA 拡張d属性を利用するようにした。 ◎ Use [Exposed=Window] extended attribute