You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
261 lines
6.4 KiB
261 lines
6.4 KiB
dojo.provide("dojox.gfx.tests.matrix"); |
|
dojo.require("dojox.gfx.matrix"); |
|
|
|
(function(){ |
|
var m = dojox.gfx.matrix; |
|
var eq = function(t, a, b){ t.t(2 * Math.abs(a - b) / ((a < 1 && b < 1) ? 1 : a + b) < 1e-6); }; |
|
tests.register("dojox.gfx.tests.matrix", [ |
|
function IdentityTest(t){ |
|
var a = new m.Matrix2D(); |
|
eq(t, a.xx, 1); |
|
eq(t, a.yy, 1); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
}, |
|
function Rot30gTest(t){ |
|
var a = m.rotateg(30); |
|
eq(t, a.xx, a.yy); |
|
eq(t, a.xy, -a.yx); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.yx, 0.5); |
|
t.t(a.xy < 0); |
|
t.t(a.yx > 0); |
|
}, |
|
function Rot45gTest(t){ |
|
var a = m.rotateg(45); |
|
eq(t, a.xx, a.yy); |
|
eq(t, a.xy, -a.yx); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, a.yx); |
|
eq(t, a.yy, -a.xy); |
|
}, |
|
function Rot90gTest(t){ |
|
var a = m.rotateg(90); |
|
eq(t, a.xx, a.yy); |
|
eq(t, a.xy, -a.yx); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, 0); |
|
eq(t, a.yx, 1); |
|
}, |
|
function CombineIdentitiesTest(t){ |
|
var a = m.normalize([new m.Matrix2D(), new m.Matrix2D(), new m.Matrix2D()]); |
|
eq(t, a.xx, 1); |
|
eq(t, a.yy, 1); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
}, |
|
function CombineExclusiveTest(t){ |
|
var a = m.normalize([m.rotateg(30), m.rotateg(-30)]); |
|
eq(t, a.xx, 1); |
|
eq(t, a.yy, 1); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
}, |
|
function CombineInvertedTest(t){ |
|
var a = m.normalize([m.rotateg(30), m.invert(m.rotateg(30))]); |
|
eq(t, a.xx, 1); |
|
eq(t, a.yy, 1); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
}, |
|
function Rot90gAtTest(t){ |
|
var a = m.rotategAt(90, 10, 10); |
|
eq(t, a.xx, a.yy); |
|
eq(t, a.xy, -a.yx); |
|
eq(t, a.dx, 20); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, 0); |
|
eq(t, a.yx, 1); |
|
}, |
|
function MultPointTest1(t){ |
|
var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 10); |
|
eq(t, b.x, 10); |
|
eq(t, b.y, 10); |
|
}, |
|
function MultPointTest2(t){ |
|
var b = m.multiplyPoint(m.rotategAt(90, 10, 10), {x: 10, y: 5}); |
|
eq(t, b.x, 15); |
|
eq(t, b.y, 10); |
|
}, |
|
function MultPointTest3(t){ |
|
var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 15); |
|
eq(t, b.x, 5); |
|
eq(t, b.y, 10); |
|
}, |
|
function ScaleTest1(t){ |
|
var a = m.normalize([m.scale(2, 1), m.invert(m.rotateg(45))]); |
|
eq(t, a.xx, 2 * a.yy); |
|
eq(t, a.xy, -2 * a.yx); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, a.xy); |
|
eq(t, a.yy, -a.yx); |
|
}, |
|
function ScaleTest2(t){ |
|
var a = m.normalize([m.scale(1, 2), m.invert(m.rotateg(45))]); |
|
eq(t, 2 * a.xx, a.yy); |
|
eq(t, 2 * a.xy, -a.yx); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, a.xy); |
|
eq(t, a.yy, -a.yx); |
|
}, |
|
function ScaleTest3(t){ |
|
var a = m.normalize([m.rotateg(45), m.scale(2, 1)]); |
|
eq(t, a.xx, 2 * a.yy); |
|
eq(t, a.yx, -2 * a.xy); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, a.yx); |
|
eq(t, a.yy, -a.xy); |
|
}, |
|
function ScaleTest4(t){ |
|
var a = m.normalize([m.rotateg(45), m.scale(1, 2)]); |
|
eq(t, 2 * a.xx, a.yy); |
|
eq(t, 2 * a.yx, -a.xy); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
eq(t, a.xx, a.yx); |
|
eq(t, a.yy, -a.xy); |
|
}, |
|
function ScaleTest5(t){ |
|
var a = m.normalize([m.rotategAt(45, 100, 100), m.scale(2)]); |
|
eq(t, a.xx, a.yy); |
|
eq(t, a.xy, -a.yx); |
|
eq(t, a.xx, a.yx); |
|
eq(t, a.yy, -a.xy); |
|
eq(t, a.dx, 100); |
|
t.t(a.dy < 0); |
|
var b = m.normalize([m.scale(2), m.rotategAt(45, 100, 100)]); |
|
eq(t, b.xx, b.yy); |
|
eq(t, b.xy, -b.yx); |
|
eq(t, b.xx, b.yx); |
|
eq(t, b.yy, -b.xy); |
|
eq(t, b.dx, 200); |
|
t.t(b.dy < 0); |
|
eq(t, a.xx, b.xx); |
|
eq(t, a.xy, b.xy); |
|
eq(t, a.yx, b.yx); |
|
eq(t, a.yy, b.yy); |
|
eq(t, 2 * a.dx, b.dx); |
|
eq(t, 2 * a.dy, b.dy); |
|
var c = m.normalize([m.rotateg(45), m.scale(2)]); |
|
eq(t, c.xx, c.yy); |
|
eq(t, c.xy, -c.yx); |
|
eq(t, c.xx, c.yx); |
|
eq(t, c.yy, -c.xy); |
|
eq(t, c.dx, 0); |
|
eq(t, c.dy, 0); |
|
var d = m.normalize([m.scale(2), m.rotateg(45)]); |
|
eq(t, d.xx, d.yy); |
|
eq(t, d.xy, -d.yx); |
|
eq(t, d.xx, d.yx); |
|
eq(t, d.yy, -d.xy); |
|
eq(t, d.dx, 0); |
|
eq(t, d.dy, 0); |
|
eq(t, a.xx, c.xx); |
|
eq(t, a.xy, c.xy); |
|
eq(t, a.yx, c.yx); |
|
eq(t, a.yy, c.yy); |
|
eq(t, a.xx, d.xx); |
|
eq(t, a.xy, d.xy); |
|
eq(t, a.yx, d.yx); |
|
eq(t, a.yy, d.yy); |
|
}, |
|
function ScaleTest6(t){ |
|
var a = m.normalize(6); |
|
eq(t, a.xx, 6); |
|
eq(t, a.yy, 6); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
}, |
|
function ScaleTest7(t){ |
|
var a = m.normalize([2, m.scale(2, 1)]); |
|
eq(t, a.xx, 4); |
|
eq(t, a.yy, 2); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 0); |
|
eq(t, a.dy, 0); |
|
}, |
|
function TranslateTest(t){ |
|
var a = m.normalize({dx: 100, dy: 200}); |
|
eq(t, a.xx, 1); |
|
eq(t, a.yy, 1); |
|
eq(t, a.xy, 0); |
|
eq(t, a.yx, 0); |
|
eq(t, a.dx, 100); |
|
eq(t, a.dy, 200); |
|
}, |
|
function ReflectTest1(t){ |
|
var b = m.multiplyPoint(m.reflect(1, 1), 1, 0); |
|
eq(t, b.x, 0); |
|
eq(t, b.y, 1); |
|
}, |
|
function ReflectTest2(t){ |
|
var b = m.multiplyPoint(m.reflect(1, 1), 0, 1); |
|
eq(t, b.x, 1); |
|
eq(t, b.y, 0); |
|
}, |
|
function ProjectTest1(t){ |
|
var b = m.multiplyPoint(m.project(1, 1), 1, 0); |
|
eq(t, b.x, 0.5); |
|
eq(t, b.y, 0.5); |
|
}, |
|
function ProjectTest2(t){ |
|
var b = m.multiplyPoint(m.project(1, 1), 0, 1); |
|
eq(t, b.x, 0.5); |
|
eq(t, b.y, 0.5); |
|
}, |
|
function IsIdentityTest(t){ |
|
var a = new m.Matrix2D(); |
|
tests.assertTrue(m.isIdentity(a)); |
|
a.xy=1; |
|
tests.assertFalse(m.isIdentity(a)); |
|
}, |
|
function MultiplyRectangle(t){ |
|
var a = new m.Matrix2D(), |
|
r = {x:0,y:0,width:3,height:2}, |
|
res; |
|
// multiply by identity -> same rect |
|
res = m.multiplyRectangle(a, r); |
|
tests.assertTrue(res.x == r.x && res.y == r.y && res.width == r.width && res.height == r.height); |
|
res = m.multiplyRectangle(m.scale(2,2), r); |
|
eq(t, res.x, 0); |
|
eq(t, res.y, 0); |
|
eq(t, res.width, 6); |
|
eq(t, res.height, 4); |
|
a = m.rotategAt(-45, 0, 0); |
|
var tl = m.multiplyPoint(a, 0, 0), // top left |
|
tr = m.multiplyPoint(a, 3, 0), // top right |
|
br = m.multiplyPoint(a, 3, 2), // bottom right |
|
bl = m.multiplyPoint(a, 0, 2), // bottom left |
|
exp = {x : tl.x, y:tr.y, width: br.x, height: bl.y - tr.y}; // expected |
|
res = m.multiplyRectangle(a, r); |
|
eq(t, res.x, exp.x); |
|
eq(t, res.y, exp.y); |
|
eq(t, res.width, exp.width); |
|
eq(t, res.height, exp.height); |
|
// matrices array |
|
res = m.multiplyRectangle([m.translate(10,10), m.scale(2,2)], r); |
|
eq(t, res.x, 10); |
|
eq(t, res.y, 10); |
|
eq(t, res.width, 6); |
|
eq(t, res.height, 4); |
|
} |
|
|
|
]); |
|
})();
|
|
|