- From: Dan Burzo via GitHub <noreply@w3.org>
- Date: Wed, 02 Jul 2025 12:32:39 +0000
- To: public-fxtf-archive@w3.org
danburzo has just created a new issue for https://github.com/w3c/fxtf-drafts: == [geometry-1] Assumption of `z=1` for `rotateAxisAngle(0, 0, z, angle)`? == I’m working on a polyfill for the Geometry Interfaces and I might be misinterpreting something in the specs, as I’m getting different results than browsers for `rotateAxisAngle()`. Given [the definition](https://drafts.fxtf.org/geometry/#dom-dommatrix-rotateaxisangleself): <blockquote> rotateAxisAngleSelf(x, y, z, angle) [Post-multiply](https://drafts.fxtf.org/geometry/#post-multiply) a rotation transformation on the current matrix around the specified vector x, y, z by the specified rotation angle in degrees. The 3D rotation matrix is [described](https://drafts.csswg.org/css-transforms-1/#RotateDefined) in CSS Transforms with alpha = angle in degrees. [[CSS3-TRANSFORMS]](https://drafts.fxtf.org/geometry/#biblio-css3-transforms) If x or y are not 0 or -0, set [is 2D](https://drafts.fxtf.org/geometry/#matrix-is-2d) of the current matrix to false. Return the current matrix. </blockquote> And the 3D rotation matrix from [css-transforms-1](https://drafts.csswg.org/css-transforms/#mathematical-description): <blockquote> A 2D rotation with the parameter alpha is equivalent to a 3D rotation with the vector [x,y,z] where x has zero as a value, y has zero as a value, z has one as a value, and the parameter alpha.  where:  </blockquote> Is there any reason for browsers to return an identical result for `rotateAxisAngle(0, 0, z, angle)` regardless of the value of `z`? <details> <summary>Console results</summary> ```js new DOMMatrix().rotateAxisAngleSelf(0, 0, 1, 40).toJSON() { "a": 0.766044443118978, "b": 0.6427876096865393, "c": -0.6427876096865393, "d": 0.766044443118978, "e": 0, "f": 0, "m11": 0.766044443118978, "m12": 0.6427876096865393, "m13": 0, "m14": 0, "m21": -0.6427876096865393, "m22": 0.766044443118978, "m23": 0, "m24": 0, "m31": 0, "m32": 0, "m33": 1, "m34": 0, "m41": 0, "m42": 0, "m43": 0, "m44": 1, "is2D": false, "isIdentity": false } new DOMMatrix().rotateAxisAngleSelf(0, 0, 2, 40).toJSON() { "a": 0.766044443118978, "b": 0.6427876096865393, "c": -0.6427876096865393, "d": 0.766044443118978, "e": 0, "f": 0, "m11": 0.766044443118978, "m12": 0.6427876096865393, "m13": 0, "m14": 0, "m21": -0.6427876096865393, "m22": 0.766044443118978, "m23": 0, "m24": 0, "m31": 0, "m32": 0, "m33": 1, "m34": 0, "m41": 0, "m42": 0, "m43": 0, "m44": 1, "is2D": false, "isIdentity": false } ``` </details> Attaching, for convenience, a function to compute the rotation matrices, in which I’ve made perhaps an error: ```js function getRotationMatrix(x = 0, y = 0, z = 0, angle = 0) { const s = Math.sin(angle * Math.PI / 360); const sc = s * Math.cos(angle * Math.PI / 360); const sq = s * s; if (x === 0 && y === 0) { return [ 1 - 2 * z * z * sq, 2 * z * sc, -2 * z * sc, 1 - 2 * z * z * sq, 0, 0 ]; } return [ 1 - 2 * (y * y + z * z) * sq, 2 * (x * y * sq + z * sc), 2 * (x * z * sq - y * sc), 0, 2 * (x * y * sq - z * sc), 1 - 2 * (x * x + z * z) * sq, 2 * (y * z * sq + x * sc), 0, 2 * (x * z * sq + y * sc), 2 * (y * z * sq - x * sc), 1 - 2 * (x * x + y * y) * sq, 0, 0, 0, 0, 1 ]; } ``` Please view or discuss this issue at https://github.com/w3c/fxtf-drafts/issues/601 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Wednesday, 2 July 2025 12:32:40 UTC