matrix.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. if (!dojo._hasResource["dojox.gfx.tests.matrix"]) { // _hasResource checks added
  2. // by build. Do not use
  3. // _hasResource directly in
  4. // your code.
  5. dojo._hasResource["dojox.gfx.tests.matrix"] = true;
  6. dojo.provide("dojox.gfx.tests.matrix");
  7. dojo.require("dojox.gfx.matrix");
  8. (function() {
  9. var m = dojox.gfx.matrix;
  10. var eq = function(t, a, b) {
  11. t.t(2 * Math.abs(a - b) / ((a < 1 && b < 1) ? 1 : a + b) < 1e-6);
  12. };
  13. tests.register("dojox.gfx.tests.matrix", [function IdentityTest(t) {
  14. var a = new m.Matrix2D();
  15. eq(t, a.xx, 1);
  16. eq(t, a.yy, 1);
  17. eq(t, a.xy, 0);
  18. eq(t, a.yx, 0);
  19. eq(t, a.dx, 0);
  20. eq(t, a.dy, 0);
  21. }, function Rot30gTest(t) {
  22. var a = m.rotateg(30);
  23. eq(t, a.xx, a.yy);
  24. eq(t, a.xy, -a.yx);
  25. eq(t, a.dx, 0);
  26. eq(t, a.dy, 0);
  27. eq(t, a.yx, 0.5);
  28. t.t(a.xy < 0);
  29. t.t(a.yx > 0);
  30. }, function Rot45gTest(t) {
  31. var a = m.rotateg(45);
  32. eq(t, a.xx, a.yy);
  33. eq(t, a.xy, -a.yx);
  34. eq(t, a.dx, 0);
  35. eq(t, a.dy, 0);
  36. eq(t, a.xx, a.yx);
  37. eq(t, a.yy, -a.xy);
  38. }, function Rot90gTest(t) {
  39. var a = m.rotateg(90);
  40. eq(t, a.xx, a.yy);
  41. eq(t, a.xy, -a.yx);
  42. eq(t, a.dx, 0);
  43. eq(t, a.dy, 0);
  44. eq(t, a.xx, 0);
  45. eq(t, a.yx, 1);
  46. }, function CombineIdentitiesTest(t) {
  47. var a = m.normalize([new m.Matrix2D(), new m.Matrix2D(),
  48. new m.Matrix2D()]);
  49. eq(t, a.xx, 1);
  50. eq(t, a.yy, 1);
  51. eq(t, a.xy, 0);
  52. eq(t, a.yx, 0);
  53. eq(t, a.dx, 0);
  54. eq(t, a.dy, 0);
  55. }, function CombineExclusiveTest(t) {
  56. var a = m.normalize([m.rotateg(30), m.rotateg(-30)]);
  57. eq(t, a.xx, 1);
  58. eq(t, a.yy, 1);
  59. eq(t, a.xy, 0);
  60. eq(t, a.yx, 0);
  61. eq(t, a.dx, 0);
  62. eq(t, a.dy, 0);
  63. }, function CombineInvertedTest(t) {
  64. var a = m
  65. .normalize([m.rotateg(30), m.invert(m.rotateg(30))]);
  66. eq(t, a.xx, 1);
  67. eq(t, a.yy, 1);
  68. eq(t, a.xy, 0);
  69. eq(t, a.yx, 0);
  70. eq(t, a.dx, 0);
  71. eq(t, a.dy, 0);
  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. }, function MultPointTest1(t) {
  81. var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 10);
  82. eq(t, b.x, 10);
  83. eq(t, b.y, 10);
  84. }, function MultPointTest2(t) {
  85. var b = m.multiplyPoint(m.rotategAt(90, 10, 10), {
  86. x : 10,
  87. y : 5
  88. });
  89. eq(t, b.x, 15);
  90. eq(t, b.y, 10);
  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. }, function ScaleTest1(t) {
  96. var a = m
  97. .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. }, function ScaleTest2(t) {
  105. var a = m
  106. .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. }, function ScaleTest3(t) {
  114. var a = m.normalize([m.rotateg(45), m.scale(2, 1)]);
  115. eq(t, a.xx, 2 * a.yy);
  116. eq(t, a.yx, -2 * a.xy);
  117. eq(t, a.dx, 0);
  118. eq(t, a.dy, 0);
  119. eq(t, a.xx, a.yx);
  120. eq(t, a.yy, -a.xy);
  121. }, function ScaleTest4(t) {
  122. var a = m.normalize([m.rotateg(45), m.scale(1, 2)]);
  123. eq(t, 2 * a.xx, a.yy);
  124. eq(t, 2 * a.yx, -a.xy);
  125. eq(t, a.dx, 0);
  126. eq(t, a.dy, 0);
  127. eq(t, a.xx, a.yx);
  128. eq(t, a.yy, -a.xy);
  129. }, function ScaleTest5(t) {
  130. var a = m
  131. .normalize([m.rotategAt(45, 100, 100), m.scale(2)]);
  132. eq(t, a.xx, a.yy);
  133. eq(t, a.xy, -a.yx);
  134. eq(t, a.xx, a.yx);
  135. eq(t, a.yy, -a.xy);
  136. eq(t, a.dx, 100);
  137. t.t(a.dy < 0);
  138. var b = m
  139. .normalize([m.scale(2), m.rotategAt(45, 100, 100)]);
  140. eq(t, b.xx, b.yy);
  141. eq(t, b.xy, -b.yx);
  142. eq(t, b.xx, b.yx);
  143. eq(t, b.yy, -b.xy);
  144. eq(t, b.dx, 200);
  145. t.t(b.dy < 0);
  146. eq(t, a.xx, b.xx);
  147. eq(t, a.xy, b.xy);
  148. eq(t, a.yx, b.yx);
  149. eq(t, a.yy, b.yy);
  150. eq(t, 2 * a.dx, b.dx);
  151. eq(t, 2 * a.dy, b.dy);
  152. var c = m.normalize([m.rotateg(45), m.scale(2)]);
  153. eq(t, c.xx, c.yy);
  154. eq(t, c.xy, -c.yx);
  155. eq(t, c.xx, c.yx);
  156. eq(t, c.yy, -c.xy);
  157. eq(t, c.dx, 0);
  158. eq(t, c.dy, 0);
  159. var d = m.normalize([m.scale(2), m.rotateg(45)]);
  160. eq(t, d.xx, d.yy);
  161. eq(t, d.xy, -d.yx);
  162. eq(t, d.xx, d.yx);
  163. eq(t, d.yy, -d.xy);
  164. eq(t, d.dx, 0);
  165. eq(t, d.dy, 0);
  166. eq(t, a.xx, c.xx);
  167. eq(t, a.xy, c.xy);
  168. eq(t, a.yx, c.yx);
  169. eq(t, a.yy, c.yy);
  170. eq(t, a.xx, d.xx);
  171. eq(t, a.xy, d.xy);
  172. eq(t, a.yx, d.yx);
  173. eq(t, a.yy, d.yy);
  174. }, function ScaleTest6(t) {
  175. var a = m.normalize(6);
  176. eq(t, a.xx, 6);
  177. eq(t, a.yy, 6);
  178. eq(t, a.xy, 0);
  179. eq(t, a.yx, 0);
  180. eq(t, a.dx, 0);
  181. eq(t, a.dy, 0);
  182. }, function ScaleTest7(t) {
  183. var a = m.normalize([2, m.scale(2, 1)]);
  184. eq(t, a.xx, 4);
  185. eq(t, a.yy, 2);
  186. eq(t, a.xy, 0);
  187. eq(t, a.yx, 0);
  188. eq(t, a.dx, 0);
  189. eq(t, a.dy, 0);
  190. }, function TranslateTest(t) {
  191. var a = m.normalize({
  192. dx : 100,
  193. dy : 200
  194. });
  195. eq(t, a.xx, 1);
  196. eq(t, a.yy, 1);
  197. eq(t, a.xy, 0);
  198. eq(t, a.yx, 0);
  199. eq(t, a.dx, 100);
  200. eq(t, a.dy, 200);
  201. }, function ReflectTest1(t) {
  202. var b = m.multiplyPoint(m.reflect(1, 1), 1, 0);
  203. eq(t, b.x, 0);
  204. eq(t, b.y, 1);
  205. }, function ReflectTest2(t) {
  206. var b = m.multiplyPoint(m.reflect(1, 1), 0, 1);
  207. eq(t, b.x, 1);
  208. eq(t, b.y, 0);
  209. }, function ProjectTest1(t) {
  210. var b = m.multiplyPoint(m.project(1, 1), 1, 0);
  211. eq(t, b.x, 0.5);
  212. eq(t, b.y, 0.5);
  213. }, function ProjectTest2(t) {
  214. var b = m.multiplyPoint(m.project(1, 1), 0, 1);
  215. eq(t, b.x, 0.5);
  216. eq(t, b.y, 0.5);
  217. }]);
  218. })();
  219. }