Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: third_party/WebKit/LayoutTests/fast/dom/geometry-interfaces-dom-matrix-rotate.html

Issue 2283363004: GeometryInterace: Add rotate methods. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/DOMMatrix.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Geometry Interfaces: DOMMatrix rotate</title>
5 <script src="../../resources/testharness.js"></script>
6 <script src="../../resources/testharnessreport.js"></script>
7 </head>
8 <body>
9 <script>
10
11 function getRotationMatrix(x, y, z, alpha_in_degrees)
12 {
13 // Vector normalizing
14 var length = Math.sqrt(x * x + y * y + z * z);
15 var nx = x / length;
16 var ny = y / length;
17 var nz = z / length;
18
19 // The 3D rotation matrix is described in CSS Transforms with alpha.
20 // Please see: https://drafts.csswg.org/css-transforms-1/#Rotate3dDefined
21 var alpha_in_radian = deg2rad(alpha_in_degrees / 2);
22 var sc = Math.sin(alpha_in_radian) * Math.cos(alpha_in_radian);
23 var sq = Math.sin(alpha_in_radian) * Math.sin(alpha_in_radian);
24
25 var m11 = 1 - 2 * (ny * ny + nz * nz) * sq;
26 var m12 = 2 * (nx * ny * sq + nz * sc);
27 var m13 = 2 * (nx * nz * sq - ny * sc);
28 var m14 = 0;
29 var m21 = 2 * (nx * ny * sq - nz * sc);
30 var m22 = 1 - 2 * (nx * nx + nz * nz) * sq;
31 var m23 = 2 * (ny * nz * sq + nx * sc);
32 var m24 = 0;
33 var m31 = 2 * (nx * nz * sq + ny * sc);
34 var m32 = 2 * (ny * nz * sq - nx * sc);
35 var m33 = 1 - 2 * (nx * nx + ny * ny) * sq;
36 var m34 = 0;
37 var m41 = 0;
38 var m42 = 0;
39 var m43 = 0;
40 var m44 = 1;
41
42 return [ m11, m12, m13, m14,
43 m21, m22, m23, m24,
44 m31, m32, m33, m34,
45 m41, m42, m43, m44 ];
46 }
47
48 function assert_array_almost_equals(actual, expected) {
49 for (var i = 0; i < actual.length; i++) {
50 assert_equals(actual[i].toFixed(10), expected[i].toFixed(10));
51 }
52 }
53
54 function deg2rad(degrees)
55 {
56 return degrees * Math.PI / 180;
57 }
58
59 function rad2deg(radians)
60 {
61 return radians * 180 / Math.PI
62 }
63
64 test(function() {
65 var actual = new DOMMatrixReadOnly([1, 2, 3, 4, 5, 6, 7, 8, 9, 10.1, 11, 12, 1 3, 14, 15, 16.6]);
66 var expected = new DOMMatrixReadOnly([1, 2, 3, 4, 5, 6, 7, 8, 9, 10.1, 11, 12, 13, 14, 15, 16.6]);
67 assert_array_almost_equals(
68 actual.rotateAxisAngle(1, 2, 3, 30).toFloat64Array(),
69 expected.multiply(new DOMMatrixReadOnly(getRotationMatrix(1, 2, 3, 30))));
70 /*
71 assert_array_equals(toArray(matrix.rotateAxisAngleSelf(1, 2, 3, 30)), getExpec tedRotationMatrix(1, 2, 3, 30));
72 assert_array_equals(toArray(matrix.rotateAxisAngleSelf(1, 2, 3, 30)), getExpec tedRotationMatrix(1, 2, 3, 30));
73 assert_array_equals(toArray(matrix.rotateAxisAngleSelf(1, 2, 3, 30)), getExpec tedRotationMatrix(1, 2, 3, 30));
74 assert_array_equals(toArray(matrix.rotateAxisAngleSelf(1, 2, 3, 30)), getExpec tedRotationMatrix(1, 2, 3, 30));
75 assert_array_equals(toArray(matrix.rotateAxisAngleSelf(1, 2, 3, 30)), getExpec tedRotationMatrix(1, 2, 3, 30));*/
76 }, "DOMMatrix.rotateAxisAnagleSelf");
77 /*
78 test(function() {
79 var matrix = new DOMMatrix();
80 assert_true(matrix.is2D);
81 assert_true(matrix.isIdentity);
82 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
83 var result = matrix.rotate(60);
84 assert_true(result.is2D);
85 assert_false(result.isIdentity);
86 var m11 = COS_60_DEG;
87 var m12 = SIN_60_DEG;
88 var m21 = -SIN_60_DEG;
89 var m22 = COS_60_DEG;
90 assert_array_equals(toArray(result), [ m11, m21, 0, 0, m12, m22, 0, 0, 0, 0, 1 , 0, 0, 0, 0, 1 ]);
91 assert_true(matrix.is2D);
92 assert_true(matrix.isIdentity);
93 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
94 matrix.rotateSelf(60);
95 assert_true(matrix.is2D);
96 assert_false(matrix.isIdentity);
97 assert_array_equals(toArray(matrix), toArray(result));
98 }, "DOMMatrix.rotate(angle) and rotateSelf(angle)");
99
100 test(function() {
101 var matrix = new DOMMatrix();
102 matrix.m11 = 1;
103 matrix.m12 = 2;
104 matrix.m21 = 3;
105 matrix.m22 = 4;
106 assert_true(matrix.is2D);
107 assert_false(matrix.isIdentity);
108 assert_array_equals(toArray(matrix), [ 1, 3, 0, 0, 2, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
109 var result = matrix.rotate(30);
110 assert_true(result.is2D);
111 assert_false(result.isIdentity);
112 var m11 = COS_30_DEG + SIN_30_DEG * 3;
113 var m12 = COS_30_DEG * 2 + SIN_30_DEG * 4;
114 var m21 = -SIN_30_DEG + COS_30_DEG * 3;
115 var m22 = -SIN_30_DEG * 2 + COS_30_DEG * 4;
116 assert_array_equals(toArray(result), [ m11, m21, 0, 0, m12, m22, 0, 0, 0, 0, 1 , 0, 0, 0, 0, 1 ]);
117 assert_true(matrix.is2D);
118 assert_false(matrix.isIdentity);
119 assert_array_equals(toArray(matrix), [ 1, 3, 0, 0, 2, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
120 matrix.rotateSelf(30);
121 assert_true(matrix.is2D);
122 assert_false(matrix.isIdentity);
123 assert_array_equals(toArray(matrix), toArray(result));
124 }, "DOMMatrix.rotate(angle) and DOMMatrix.rotateSelf(angle) with non-identity");
125
126 test(function() {
127 var matrix = new DOMMatrix();
128 matrix.m11 = 1;
129 matrix.m12 = 2;
130 matrix.m21 = 3;
131 matrix.m22 = 4;
132 matrix.m13 = 5;
133 matrix.m23 = 6;
134 matrix.m33 = 7;
135 assert_false(matrix.is2D);
136 assert_false(matrix.isIdentity);
137 assert_array_equals(toArray(matrix), [ 1, 3, 0, 0, 2, 4, 0, 0, 5, 6, 7, 0, 0, 0, 0, 1 ]);
138 var result = matrix.rotate(30);
139 assert_false(result.is2D);
140 assert_false(result.isIdentity);
141 var m11 = COS_30_DEG + SIN_30_DEG * 3;
142 var m12 = COS_30_DEG * 2 + SIN_30_DEG * 4;
143 var m13 = COS_30_DEG * 5 + SIN_30_DEG * 6;
144 var m21 = -SIN_30_DEG + COS_30_DEG * 3;
145 var m22 = -SIN_30_DEG * 2 + COS_30_DEG * 4;
146 var m23 = -SIN_30_DEG * 5 + COS_30_DEG * 6;
147 assert_array_equals(toArray(result), [ m11, m21, 0, 0, m12, m22, 0, 0, m13, m2 3, 7, 0, 0, 0, 0, 1 ]);
148 assert_false(matrix.is2D);
149 assert_false(matrix.isIdentity);
150 assert_array_equals(toArray(matrix), [ 1, 3, 0, 0, 2, 4, 0, 0, 5, 6, 7, 0, 0, 0, 0, 1 ]);
151 matrix.rotateSelf(30);
152 assert_false(matrix.is2D);
153 assert_false(matrix.isIdentity);
154 assert_array_equals(toArray(matrix), toArray(result));
155 }, "DOMMatrix.rotate(angle) and DOMMatrix.rotateSelf(angle) when is2D property i s false");
156
157 test(function() {
158 var matrix = new DOMMatrix();
159 assert_true(matrix.is2D);
160 assert_true(matrix.isIdentity);
161 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
162 var result = matrix.rotate(45, 10, 10);
163 var expected = new DOMMatrix();
164 expected.translateSelf(10, 10);
165 expected.rotateSelf(45);
166 expected.translateSelf(-10, -10);
167 assert_true(result.is2D);
168 assert_false(result.isIdentity);
169 assert_array_equals(toArray(result), toArray(expected));
170 assert_true(matrix.is2D);
171 assert_true(matrix.isIdentity);
172 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
173 matrix.rotateSelf(45, 10, 10);
174 assert_true(matrix.is2D);
175 assert_false(matrix.isIdentity);
176 assert_array_equals(toArray(matrix), toArray(result));
177 }, "DOMMatrix.rotate(angle, ox, oy)");
178
179 test(function() {
180 var matrix = new DOMMatrix();
181 assert_true(matrix.is2D);
182 assert_true(matrix.isIdentity);
183 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
184 var result = matrix.rotateFromVector(4, 7);
185 var expected = new DOMMatrix();
186 expected.rotateSelf(rad2deg(Math.atan2(7, 4)));
187 assert_true(result.is2D);
188 assert_false(result.isIdentity);
189 assert_array_equals(toArray(result), toArray(expected));
190 assert_true(matrix.is2D);
191 assert_true(matrix.isIdentity);
192 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
193 matrix.rotateFromVectorSelf(4, 7);
194 assert_true(matrix.is2D);
195 assert_false(matrix.isIdentity);
196 assert_array_equals(toArray(matrix), toArray(result));
197 }, "DOMMatrix.rotateFromVector(x, y) and DOMMatrix.rotateFromVectorSelf(x, y)");
198
199 test(function() {
200 var matrix = new DOMMatrix();
201 assert_true(matrix.is2D);
202 assert_true(matrix.isIdentity);
203 assert_array_equals(toArray(matrix), [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
204 var x_result = matrix.rotateAxisAngle(1, 0, 0, 30);
205 assert_false(x_result.is2D);
206 assert_false(x_result.isIdentity);
207 assert_array_equals(toArray(x_result), [ 1, 0, 0, 0, 0, COS_30_DEG, -SIN_30_DE G, 0, 0, SIN_30_DEG, COS_30_DEG, 0, 0, 0, 0, 1 ]);
208 var y_result = matrix.rotateAxisAngle(0, 1, 0, 45);
209 assert_false(y_result.is2D);
210 assert_false(y_result.isIdentity);
211 assert_array_equals(toArray(y_result), [ COS_45_DEG, 0, SIN_45_DEG, 0, 0, 1, 0 , 0, -SIN_45_DEG, 0, COS_45_DEG, 0, 0, 0, 0, 1 ]);
212 var z_result = matrix.rotateAxisAngle(0, 0, 1, 60);
213 assert_true(z_result.is2D);
214 assert_false(z_result.isIdentity);
215 assert_array_equals(toArray(z_result), [ COS_60_DEG, -SIN_60_DEG, 0, 0, SIN_60 _DEG, COS_60_DEG, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);
216 var expected = new DOMMatrix();
217 expected.rotateSelf(60);
218 assert_array_equals(toArray(z_result), toArray(expected));
219 matrix.rotateAxisAngleSelf(1, 0, 0, 30);
220 assert_false(matrix.is2D);
221 assert_false(matrix.isIdentity);
222 assert_array_equals(toArray(matrix), toArray(x_result));
223 }, "DOMMatrix.rotateAxisAngle(x, y, z, angle) and DOMMatrix.rotateAxisAngleSelf( x, y, z, angle)");
224 */
225 </script>
226 </body>
227 </html>
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/DOMMatrix.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698