scaleX 不起作用,它似乎总是给出一个正值。最后我不得不对矩阵做这个来得到答案。这是基于我们知道矩阵总是包含一个 2D 旋转的想法,并且我们知道角度,所以我们可以摆脱矩阵元素的旋转,只留下比例尺。这很可怕,但它似乎有效。
此外,旋转有时会显示为 NaN,尤其是当元素被翻转时。使用 skewX 的值似乎适用于您知道不倾斜的东西,但我希望我的导出器能够处理倾斜的元素,所以我认为这可能是这里另一个问题的基础。
var rotationRadians;
if(isNaN(someElement.rotation)) {
rotationRadians = someElement.skewX * Math.PI / 180;
}
else {
rotationRadians = someElement.rotation * Math.PI / 180;
}
var sinRot = Math.sin(rotationRadians);
var cosRot = Math.cos(rotationRadians);
var SOME_EPSILON = 0.01;
var flipScaleX, flipScaleY;
if(Math.abs(cosRot) < SOME_EPSILON) {
// Avoid divide by zero. We can use sine and the other two elements of the matrix instead.
flipScaleX = (someElement.matrix.b / sinRot);
flipScaleY = (someElement.matrix.c / -sinRot);
}
else {
flipScaleX = someElement.matrix.a / cosRot;
flipScaleY = someElement.matrix.d / cosRot;
}
如果水平翻转,flipScaleX 出现在 ~-1,否则出现 ~1。如果垂直翻转,则 flipScaleY 为 ~-1,否则为 ~1。