【发布时间】:2017-05-30 14:50:57
【问题描述】:
我在代码下做了仿射变换。
/**
* @description getAffineTransform using SRT
* @param {Number} xScale xScale
* @param {Number} yScale yScale
* @param {Number} radian radian
* @param {Point} position position
* @param {Point} pivot pivot
* @return {CanvasMatrix} CanvasMatrix
* @member CoordinateSystem#getAffineTransform
*/
getAffineTransform(xScale, yScale, radian, position, pivot) {
let a, b, c, d;
let matrix = new CanvasMatrix();
// origin to pivot
if (pivot) {
matrix = matrix.multiply(new CanvasMatrix(1, 0, 0, 1, pivot.x, pivot.y));
}
// Scale
matrix = matrix.multiply(new CanvasMatrix(xScale, 0, 0, yScale, 0, 0));
// Rotate
if (this._opt.orientation === ORIENTATION.CCW) {
a = Math.cos(radian);
b = -Math.sin(radian);
c = Math.sin(radian);
d = Math.cos(radian);
} else {
a = Math.cos(radian);
b = Math.sin(radian);
c = -Math.sin(radian);
d = Math.cos(radian);
}
matrix = matrix.multiply(new CanvasMatrix(a, b, c, d, 0, 0));
// Translate
matrix = matrix.multiply(new CanvasMatrix(1, 0, 0, 1, position.x, position.y));
// pivot to origin'
if (pivot) {
matrix = matrix.multiply(new CanvasMatrix(1, 0, 0, 1, -pivot.x, -pivot.y));
}
return matrix;
}
它在不移动枢轴的情况下工作得很好。 但是,如果我将旧枢轴移动到新枢轴,它就不起作用。 它被新的枢轴重置。 我怎样才能保持老支点。
【问题讨论】: