[483] | 1 | dojo.provide("dojox.gfx.tests.matrix"); |
---|
| 2 | dojo.require("dojox.gfx.matrix"); |
---|
| 3 | |
---|
| 4 | (function(){ |
---|
| 5 | var m = dojox.gfx.matrix; |
---|
| 6 | var eq = function(t, a, b){ t.t(2 * Math.abs(a - b) / ((a < 1 && b < 1) ? 1 : a + b) < 1e-6); }; |
---|
| 7 | tests.register("dojox.gfx.tests.matrix", [ |
---|
| 8 | function IdentityTest(t){ |
---|
| 9 | var a = new m.Matrix2D(); |
---|
| 10 | eq(t, a.xx, 1); |
---|
| 11 | eq(t, a.yy, 1); |
---|
| 12 | eq(t, a.xy, 0); |
---|
| 13 | eq(t, a.yx, 0); |
---|
| 14 | eq(t, a.dx, 0); |
---|
| 15 | eq(t, a.dy, 0); |
---|
| 16 | }, |
---|
| 17 | function Rot30gTest(t){ |
---|
| 18 | var a = m.rotateg(30); |
---|
| 19 | eq(t, a.xx, a.yy); |
---|
| 20 | eq(t, a.xy, -a.yx); |
---|
| 21 | eq(t, a.dx, 0); |
---|
| 22 | eq(t, a.dy, 0); |
---|
| 23 | eq(t, a.yx, 0.5); |
---|
| 24 | t.t(a.xy < 0); |
---|
| 25 | t.t(a.yx > 0); |
---|
| 26 | }, |
---|
| 27 | function Rot45gTest(t){ |
---|
| 28 | var a = m.rotateg(45); |
---|
| 29 | eq(t, a.xx, a.yy); |
---|
| 30 | eq(t, a.xy, -a.yx); |
---|
| 31 | eq(t, a.dx, 0); |
---|
| 32 | eq(t, a.dy, 0); |
---|
| 33 | eq(t, a.xx, a.yx); |
---|
| 34 | eq(t, a.yy, -a.xy); |
---|
| 35 | }, |
---|
| 36 | function Rot90gTest(t){ |
---|
| 37 | var a = m.rotateg(90); |
---|
| 38 | eq(t, a.xx, a.yy); |
---|
| 39 | eq(t, a.xy, -a.yx); |
---|
| 40 | eq(t, a.dx, 0); |
---|
| 41 | eq(t, a.dy, 0); |
---|
| 42 | eq(t, a.xx, 0); |
---|
| 43 | eq(t, a.yx, 1); |
---|
| 44 | }, |
---|
| 45 | function CombineIdentitiesTest(t){ |
---|
| 46 | var a = m.normalize([new m.Matrix2D(), new m.Matrix2D(), new m.Matrix2D()]); |
---|
| 47 | eq(t, a.xx, 1); |
---|
| 48 | eq(t, a.yy, 1); |
---|
| 49 | eq(t, a.xy, 0); |
---|
| 50 | eq(t, a.yx, 0); |
---|
| 51 | eq(t, a.dx, 0); |
---|
| 52 | eq(t, a.dy, 0); |
---|
| 53 | }, |
---|
| 54 | function CombineExclusiveTest(t){ |
---|
| 55 | var a = m.normalize([m.rotateg(30), m.rotateg(-30)]); |
---|
| 56 | eq(t, a.xx, 1); |
---|
| 57 | eq(t, a.yy, 1); |
---|
| 58 | eq(t, a.xy, 0); |
---|
| 59 | eq(t, a.yx, 0); |
---|
| 60 | eq(t, a.dx, 0); |
---|
| 61 | eq(t, a.dy, 0); |
---|
| 62 | }, |
---|
| 63 | function CombineInvertedTest(t){ |
---|
| 64 | var a = m.normalize([m.rotateg(30), m.invert(m.rotateg(30))]); |
---|
| 65 | eq(t, a.xx, 1); |
---|
| 66 | eq(t, a.yy, 1); |
---|
| 67 | eq(t, a.xy, 0); |
---|
| 68 | eq(t, a.yx, 0); |
---|
| 69 | eq(t, a.dx, 0); |
---|
| 70 | eq(t, a.dy, 0); |
---|
| 71 | }, |
---|
| 72 | function Rot90gAtTest(t){ |
---|
| 73 | var a = m.rotategAt(90, 10, 10); |
---|
| 74 | eq(t, a.xx, a.yy); |
---|
| 75 | eq(t, a.xy, -a.yx); |
---|
| 76 | eq(t, a.dx, 20); |
---|
| 77 | eq(t, a.dy, 0); |
---|
| 78 | eq(t, a.xx, 0); |
---|
| 79 | eq(t, a.yx, 1); |
---|
| 80 | }, |
---|
| 81 | function MultPointTest1(t){ |
---|
| 82 | var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 10); |
---|
| 83 | eq(t, b.x, 10); |
---|
| 84 | eq(t, b.y, 10); |
---|
| 85 | }, |
---|
| 86 | function MultPointTest2(t){ |
---|
| 87 | var b = m.multiplyPoint(m.rotategAt(90, 10, 10), {x: 10, y: 5}); |
---|
| 88 | eq(t, b.x, 15); |
---|
| 89 | eq(t, b.y, 10); |
---|
| 90 | }, |
---|
| 91 | function MultPointTest3(t){ |
---|
| 92 | var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 15); |
---|
| 93 | eq(t, b.x, 5); |
---|
| 94 | eq(t, b.y, 10); |
---|
| 95 | }, |
---|
| 96 | function ScaleTest1(t){ |
---|
| 97 | var a = m.normalize([m.scale(2, 1), m.invert(m.rotateg(45))]); |
---|
| 98 | eq(t, a.xx, 2 * a.yy); |
---|
| 99 | eq(t, a.xy, -2 * a.yx); |
---|
| 100 | eq(t, a.dx, 0); |
---|
| 101 | eq(t, a.dy, 0); |
---|
| 102 | eq(t, a.xx, a.xy); |
---|
| 103 | eq(t, a.yy, -a.yx); |
---|
| 104 | }, |
---|
| 105 | function ScaleTest2(t){ |
---|
| 106 | var a = m.normalize([m.scale(1, 2), m.invert(m.rotateg(45))]); |
---|
| 107 | eq(t, 2 * a.xx, a.yy); |
---|
| 108 | eq(t, 2 * a.xy, -a.yx); |
---|
| 109 | eq(t, a.dx, 0); |
---|
| 110 | eq(t, a.dy, 0); |
---|
| 111 | eq(t, a.xx, a.xy); |
---|
| 112 | eq(t, a.yy, -a.yx); |
---|
| 113 | }, |
---|
| 114 | function ScaleTest3(t){ |
---|
| 115 | var a = m.normalize([m.rotateg(45), m.scale(2, 1)]); |
---|
| 116 | eq(t, a.xx, 2 * a.yy); |
---|
| 117 | eq(t, a.yx, -2 * a.xy); |
---|
| 118 | eq(t, a.dx, 0); |
---|
| 119 | eq(t, a.dy, 0); |
---|
| 120 | eq(t, a.xx, a.yx); |
---|
| 121 | eq(t, a.yy, -a.xy); |
---|
| 122 | }, |
---|
| 123 | function ScaleTest4(t){ |
---|
| 124 | var a = m.normalize([m.rotateg(45), m.scale(1, 2)]); |
---|
| 125 | eq(t, 2 * a.xx, a.yy); |
---|
| 126 | eq(t, 2 * a.yx, -a.xy); |
---|
| 127 | eq(t, a.dx, 0); |
---|
| 128 | eq(t, a.dy, 0); |
---|
| 129 | eq(t, a.xx, a.yx); |
---|
| 130 | eq(t, a.yy, -a.xy); |
---|
| 131 | }, |
---|
| 132 | function ScaleTest5(t){ |
---|
| 133 | var a = m.normalize([m.rotategAt(45, 100, 100), m.scale(2)]); |
---|
| 134 | eq(t, a.xx, a.yy); |
---|
| 135 | eq(t, a.xy, -a.yx); |
---|
| 136 | eq(t, a.xx, a.yx); |
---|
| 137 | eq(t, a.yy, -a.xy); |
---|
| 138 | eq(t, a.dx, 100); |
---|
| 139 | t.t(a.dy < 0); |
---|
| 140 | var b = m.normalize([m.scale(2), m.rotategAt(45, 100, 100)]); |
---|
| 141 | eq(t, b.xx, b.yy); |
---|
| 142 | eq(t, b.xy, -b.yx); |
---|
| 143 | eq(t, b.xx, b.yx); |
---|
| 144 | eq(t, b.yy, -b.xy); |
---|
| 145 | eq(t, b.dx, 200); |
---|
| 146 | t.t(b.dy < 0); |
---|
| 147 | eq(t, a.xx, b.xx); |
---|
| 148 | eq(t, a.xy, b.xy); |
---|
| 149 | eq(t, a.yx, b.yx); |
---|
| 150 | eq(t, a.yy, b.yy); |
---|
| 151 | eq(t, 2 * a.dx, b.dx); |
---|
| 152 | eq(t, 2 * a.dy, b.dy); |
---|
| 153 | var c = m.normalize([m.rotateg(45), m.scale(2)]); |
---|
| 154 | eq(t, c.xx, c.yy); |
---|
| 155 | eq(t, c.xy, -c.yx); |
---|
| 156 | eq(t, c.xx, c.yx); |
---|
| 157 | eq(t, c.yy, -c.xy); |
---|
| 158 | eq(t, c.dx, 0); |
---|
| 159 | eq(t, c.dy, 0); |
---|
| 160 | var d = m.normalize([m.scale(2), m.rotateg(45)]); |
---|
| 161 | eq(t, d.xx, d.yy); |
---|
| 162 | eq(t, d.xy, -d.yx); |
---|
| 163 | eq(t, d.xx, d.yx); |
---|
| 164 | eq(t, d.yy, -d.xy); |
---|
| 165 | eq(t, d.dx, 0); |
---|
| 166 | eq(t, d.dy, 0); |
---|
| 167 | eq(t, a.xx, c.xx); |
---|
| 168 | eq(t, a.xy, c.xy); |
---|
| 169 | eq(t, a.yx, c.yx); |
---|
| 170 | eq(t, a.yy, c.yy); |
---|
| 171 | eq(t, a.xx, d.xx); |
---|
| 172 | eq(t, a.xy, d.xy); |
---|
| 173 | eq(t, a.yx, d.yx); |
---|
| 174 | eq(t, a.yy, d.yy); |
---|
| 175 | }, |
---|
| 176 | function ScaleTest6(t){ |
---|
| 177 | var a = m.normalize(6); |
---|
| 178 | eq(t, a.xx, 6); |
---|
| 179 | eq(t, a.yy, 6); |
---|
| 180 | eq(t, a.xy, 0); |
---|
| 181 | eq(t, a.yx, 0); |
---|
| 182 | eq(t, a.dx, 0); |
---|
| 183 | eq(t, a.dy, 0); |
---|
| 184 | }, |
---|
| 185 | function ScaleTest7(t){ |
---|
| 186 | var a = m.normalize([2, m.scale(2, 1)]); |
---|
| 187 | eq(t, a.xx, 4); |
---|
| 188 | eq(t, a.yy, 2); |
---|
| 189 | eq(t, a.xy, 0); |
---|
| 190 | eq(t, a.yx, 0); |
---|
| 191 | eq(t, a.dx, 0); |
---|
| 192 | eq(t, a.dy, 0); |
---|
| 193 | }, |
---|
| 194 | function TranslateTest(t){ |
---|
| 195 | var a = m.normalize({dx: 100, dy: 200}); |
---|
| 196 | eq(t, a.xx, 1); |
---|
| 197 | eq(t, a.yy, 1); |
---|
| 198 | eq(t, a.xy, 0); |
---|
| 199 | eq(t, a.yx, 0); |
---|
| 200 | eq(t, a.dx, 100); |
---|
| 201 | eq(t, a.dy, 200); |
---|
| 202 | }, |
---|
| 203 | function ReflectTest1(t){ |
---|
| 204 | var b = m.multiplyPoint(m.reflect(1, 1), 1, 0); |
---|
| 205 | eq(t, b.x, 0); |
---|
| 206 | eq(t, b.y, 1); |
---|
| 207 | }, |
---|
| 208 | function ReflectTest2(t){ |
---|
| 209 | var b = m.multiplyPoint(m.reflect(1, 1), 0, 1); |
---|
| 210 | eq(t, b.x, 1); |
---|
| 211 | eq(t, b.y, 0); |
---|
| 212 | }, |
---|
| 213 | function ProjectTest1(t){ |
---|
| 214 | var b = m.multiplyPoint(m.project(1, 1), 1, 0); |
---|
| 215 | eq(t, b.x, 0.5); |
---|
| 216 | eq(t, b.y, 0.5); |
---|
| 217 | }, |
---|
| 218 | function ProjectTest2(t){ |
---|
| 219 | var b = m.multiplyPoint(m.project(1, 1), 0, 1); |
---|
| 220 | eq(t, b.x, 0.5); |
---|
| 221 | eq(t, b.y, 0.5); |
---|
| 222 | }, |
---|
| 223 | function IsIdentityTest(t){ |
---|
| 224 | var a = new m.Matrix2D(); |
---|
| 225 | tests.assertTrue(m.isIdentity(a)); |
---|
| 226 | a.xy=1; |
---|
| 227 | tests.assertFalse(m.isIdentity(a)); |
---|
| 228 | }, |
---|
| 229 | function MultiplyRectangle(t){ |
---|
| 230 | var a = new m.Matrix2D(), |
---|
| 231 | r = {x:0,y:0,width:3,height:2}, |
---|
| 232 | res; |
---|
| 233 | // multiply by identity -> same rect |
---|
| 234 | res = m.multiplyRectangle(a, r); |
---|
| 235 | tests.assertTrue(res.x == r.x && res.y == r.y && res.width == r.width && res.height == r.height); |
---|
| 236 | res = m.multiplyRectangle(m.scale(2,2), r); |
---|
| 237 | eq(t, res.x, 0); |
---|
| 238 | eq(t, res.y, 0); |
---|
| 239 | eq(t, res.width, 6); |
---|
| 240 | eq(t, res.height, 4); |
---|
| 241 | a = m.rotategAt(-45, 0, 0); |
---|
| 242 | var tl = m.multiplyPoint(a, 0, 0), // top left |
---|
| 243 | tr = m.multiplyPoint(a, 3, 0), // top right |
---|
| 244 | br = m.multiplyPoint(a, 3, 2), // bottom right |
---|
| 245 | bl = m.multiplyPoint(a, 0, 2), // bottom left |
---|
| 246 | exp = {x : tl.x, y:tr.y, width: br.x, height: bl.y - tr.y}; // expected |
---|
| 247 | res = m.multiplyRectangle(a, r); |
---|
| 248 | eq(t, res.x, exp.x); |
---|
| 249 | eq(t, res.y, exp.y); |
---|
| 250 | eq(t, res.width, exp.width); |
---|
| 251 | eq(t, res.height, exp.height); |
---|
| 252 | // matrices array |
---|
| 253 | res = m.multiplyRectangle([m.translate(10,10), m.scale(2,2)], r); |
---|
| 254 | eq(t, res.x, 10); |
---|
| 255 | eq(t, res.y, 10); |
---|
| 256 | eq(t, res.width, 6); |
---|
| 257 | eq(t, res.height, 4); |
---|
| 258 | } |
---|
| 259 | |
---|
| 260 | ]); |
---|
| 261 | })(); |
---|