Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, 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-трансформации доступным языком