Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
new Matrix2d(). Rotate(angle, rotationPoint). FlipY(rotationPoint). CreateTransform(context);
function Matrix2d () {
var _matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
var CalcOffset = function (matrix) {
var x = matrix[0][2] * matrix[0][0] + matrix[1][2] * matrix[0][1];
var y = matrix[0][2] * matrix[1][0] + matrix[1][2] * matrix[1][1];
matrix[0][2] -= x;
matrix[1][2] -= y;
return matrix;
}
var Multiply = function (matrix) {
var mulMatrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
for (var x = 0; x < 3; x++) {
for (var y = 0; y < 3; y++) {
var sum = 0;
for (var dim = 0; dim < 3; dim++) {
sum += _matrix[y][dim] * matrix[dim][x];
}
mulMatrix[y][x] = sum;
}
}
_matrix = mulMatrix;
}
this.Rotate = function (angle, point) {
var sin = Math.sin(angle);
var cos = Math.cos(angle);
Multiply(CalcOffset([
[cos, -sin, point.x],
[sin, cos, point.y],
[0, 0, 1]
]));
return this;
}
this.FlipY = function (point) {
Multiply(CalcOffset([
[-1, 0, point.x],
[0, 1, point.y],
[0, 0, 1]
]));
return this;
}
this.FlipX = function (point) {
Multiply(CalcOffset([
[1, 0, point.x],
[0, -1, point.y],
[0, 0, 1]
]));
return this;
}
this.FlipXY = function (point) {
Multiply(CalcOffset([
[-1, 0, point.x],
[0, -1, point.y],
[0, 0, 1]
]));
return this;
}
this.CreateTransform = function (context) {
context.transform(
_matrix[0][0],
_matrix[1][0],
_matrix[0][1],
_matrix[1][1],
_matrix[0][2],
_matrix[1][2]);
return this;
}
}
Canvas-трансформации доступным языком