/* * Paper.js - The Swiss Army Knife of Vector Graphics Scripting. * http://paperjs.org/ * * Copyright (c) 2011 - 2013, Juerg Lehni & Jonathan Puckey * http://lehni.org/ & http://jonathanpuckey.com/ * * Distributed under the MIT license. See LICENSE file for details. * * All rights reserved. */ module('Matrix'); test('Decomposition: rotate()', function() { function testAngle(angle, expected) { equals(new Matrix().rotate(angle).getRotation(), Base.pick(expected, angle), 'new Matrix().rotate(' + angle + ').getRotation()', Numerical.TOLERANCE); equals(new Matrix().rotate(angle).getScaling(), new Point(1, 1), 'new Matrix().rotate(' + angle + ').getScaling()'); } testAngle(0); testAngle(1); testAngle(45); testAngle(90); testAngle(135); testAngle(180); testAngle(270, -90); testAngle(-1); testAngle(-45); testAngle(-90); testAngle(-135); testAngle(-180); testAngle(-270, 90); }); test('Decomposition: scale()', function() { function testScale(sx, sy) { var flipped = sx < 0 && sy < 0; equals(new Matrix().scale(sx, sy).getScaling(), new Point(flipped ? -sx : sx, flipped ? -sy : sy), 'new Matrix().scale(' + sx + ', ' + sy + ').getScaling()'); equals(new Matrix().scale(sx, sy).getRotation(), flipped ? 180 : 0, 'new Matrix().scale(' + sx + ', ' + sy + ').getRotation()', Numerical.TOLERANCE); } testScale(1, 1); testScale(1, -1); testScale(-1, 1); testScale(-1, -1); testScale(2, 4); testScale(2, -4); testScale(4, 2); testScale(-4, 2); testScale(-4, -4); }); test('Decomposition: rotate() & scale()', function() { equals(function() { return new Matrix().scale(2, 4).rotate(45).getScaling(); }, new Point(2, 4)); equals(function() { return new Matrix().scale(2, 4).rotate(45).getRotation(); }, 45); equals(function() { return new Matrix().scale(2, -4).rotate(45).getScaling(); }, new Point(2, -4)); equals(function() { return new Matrix().scale(2, -4).rotate(45).getRotation(); }, 45); equals(function() { return new Matrix().scale(-2, 4).rotate(45).getScaling(); }, new Point(-2, 4)); equals(function() { return new Matrix().scale(-2, 4).rotate(45).getRotation(); }, 45); equals(function() { return new Matrix().scale(-2, -4).rotate(45).getScaling(); }, new Point(-2, -4)); equals(function() { return new Matrix().scale(-2, -4).rotate(45).getRotation(); }, 45); });