]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/rot_mat_test.cpp
1 //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #include <boost/qvm/mat_operations.hpp>
7 #include <boost/qvm/mat.hpp>
8 #include "test_qvm_matrix.hpp"
9 #include "test_qvm_vector.hpp"
18 using namespace boost::qvm
;
19 test_qvm::vector
<V1
,3> axis
; axis
.a
[0]=1;
20 for( float r
=0; r
<6.28f
; r
+=0.5f
)
22 test_qvm::matrix
<M1
,D
,D
> const m1
=rot_mat
<D
>(axis
,r
);
23 test_qvm::rotation_x(m1
.b
,r
);
24 BOOST_QVM_TEST_EQ(m1
.a
,m1
.b
);
25 test_qvm::matrix
<M1
,D
,D
> m2(42,1);
27 test_qvm::rotation_x(m2
.b
,r
);
28 BOOST_QVM_TEST_EQ(m2
.a
,m2
.b
);
29 test_qvm::matrix
<M1
,D
,D
> m3(42,1);
30 test_qvm::matrix
<M1
,D
,D
> m4(42,1);
33 BOOST_QVM_TEST_EQ(m3
.a
,m3
.a
);
41 using namespace boost::qvm
;
42 test_qvm::vector
<V1
,3> axis
; axis
.a
[1]=1;
43 for( float r
=0; r
<6.28f
; r
+=0.5f
)
45 test_qvm::matrix
<M1
,D
,D
> m1
=rot_mat
<D
>(axis
,r
);
46 test_qvm::rotation_y(m1
.b
,r
);
47 BOOST_QVM_TEST_EQ(m1
.a
,m1
.b
);
48 test_qvm::matrix
<M1
,D
,D
> m2(42,1);
50 test_qvm::rotation_y(m2
.b
,r
);
51 BOOST_QVM_TEST_EQ(m2
.a
,m2
.b
);
52 test_qvm::matrix
<M1
,D
,D
> m3(42,1);
53 test_qvm::matrix
<M1
,D
,D
> m4(42,1);
56 BOOST_QVM_TEST_EQ(m3
.a
,m3
.a
);
64 using namespace boost::qvm
;
65 test_qvm::vector
<V1
,3> axis
; axis
.a
[2]=1;
66 for( float r
=0; r
<6.28f
; r
+=0.5f
)
68 test_qvm::matrix
<M1
,D
,D
> m1
=rot_mat
<D
>(axis
,r
);
69 test_qvm::rotation_z(m1
.b
,r
);
70 BOOST_QVM_TEST_EQ(m1
.a
,m1
.b
);
71 test_qvm::matrix
<M1
,D
,D
> m2(42,1);
73 test_qvm::rotation_z(m2
.b
,r
);
74 BOOST_QVM_TEST_EQ(m2
.a
,m2
.b
);
75 test_qvm::matrix
<M1
,D
,D
> m3(42,1);
76 test_qvm::matrix
<M1
,D
,D
> m4(42,1);
79 BOOST_QVM_TEST_EQ(m3
.a
,m3
.a
);
87 using namespace boost::qvm
;
88 for( float x1
=0; x1
<6.28f
; x1
+=0.5f
)
89 for( float z2
=0; z2
<6.28f
; z2
+=0.5f
)
90 for( float y3
=0; y3
<6.28f
; y3
+=0.5f
)
92 mat
<float,D
,D
> const m2
= rotx_mat
<D
>(x1
) * rotz_mat
<D
>(z2
) * roty_mat
<D
>(y3
);
94 mat
<float,D
,D
> m1
= rot_mat_xzy
<D
>(x1
,z2
,y3
);
95 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
98 mat
<float,D
,D
> m1
; set_rot_xzy(m1
,x1
,z2
,y3
);
99 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
102 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_xzy(m1
,x1
,z2
,y3
);
103 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
112 using namespace boost::qvm
;
113 for( float x1
=0; x1
<6.28f
; x1
+=0.5f
)
114 for( float y2
=0; y2
<6.28f
; y2
+=0.5f
)
115 for( float z3
=0; z3
<6.28f
; z3
+=0.5f
)
117 mat
<float,D
,D
> const m2
= rotx_mat
<D
>(x1
) * roty_mat
<D
>(y2
) * rotz_mat
<D
>(z3
);
119 mat
<float,D
,D
> m1
= rot_mat_xyz
<D
>(x1
,y2
,z3
);
120 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
123 mat
<float,D
,D
> m1
; set_rot_xyz(m1
,x1
,y2
,z3
);
124 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
127 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_xyz(m1
,x1
,y2
,z3
);
128 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
137 using namespace boost::qvm
;
138 for( float y1
=0; y1
<6.28f
; y1
+=0.5f
)
139 for( float x2
=0; x2
<6.28f
; x2
+=0.5f
)
140 for( float z3
=0; z3
<6.28f
; z3
+=0.5f
)
142 mat
<float,D
,D
> const m2
= roty_mat
<D
>(y1
) * rotx_mat
<D
>(x2
) * rotz_mat
<D
>(z3
);
144 mat
<float,D
,D
> m1
= rot_mat_yxz
<D
>(y1
,x2
,z3
);
145 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
148 mat
<float,D
,D
> m1
; set_rot_yxz(m1
,y1
,x2
,z3
);
149 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
152 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_yxz(m1
,y1
,x2
,z3
);
153 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
162 using namespace boost::qvm
;
163 for( float y1
=0; y1
<6.28f
; y1
+=0.5f
)
164 for( float z2
=0; z2
<6.28f
; z2
+=0.5f
)
165 for( float x3
=0; x3
<6.28f
; x3
+=0.5f
)
167 mat
<float,D
,D
> const m2
= roty_mat
<D
>(y1
) * rotz_mat
<D
>(z2
) * rotx_mat
<D
>(x3
);
169 mat
<float,D
,D
> m1
= rot_mat_yzx
<D
>(y1
,z2
,x3
);
170 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
173 mat
<float,D
,D
> m1
; set_rot_yzx(m1
,y1
,z2
,x3
);
174 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
177 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_yzx(m1
,y1
,z2
,x3
);
178 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
187 using namespace boost::qvm
;
188 for( float z1
=0; z1
<6.28f
; z1
+=0.5f
)
189 for( float y2
=0; y2
<6.28f
; y2
+=0.5f
)
190 for( float x3
=0; x3
<6.28f
; x3
+=0.5f
)
192 mat
<float,D
,D
> const m2
= rotz_mat
<D
>(z1
) * roty_mat
<D
>(y2
) * rotx_mat
<D
>(x3
);
194 mat
<float,D
,D
> m1
= rot_mat_zyx
<D
>(z1
,y2
,x3
);
195 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
198 mat
<float,D
,D
> m1
; set_rot_zyx(m1
,z1
,y2
,x3
);
199 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
202 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_zyx(m1
,z1
,y2
,x3
);
203 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
212 using namespace boost::qvm
;
213 for( float z1
=0; z1
<6.28f
; z1
+=0.5f
)
214 for( float x2
=0; x2
<6.28f
; x2
+=0.5f
)
215 for( float y3
=0; y3
<6.28f
; y3
+=0.5f
)
217 mat
<float,D
,D
> const m2
= rotz_mat
<D
>(z1
) * rotx_mat
<D
>(x2
) * roty_mat
<D
>(y3
);
219 mat
<float,D
,D
> m1
= rot_mat_zxy
<D
>(z1
,x2
,y3
);
220 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
223 mat
<float,D
,D
> m1
; set_rot_zxy(m1
,z1
,x2
,y3
);
224 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
227 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_zxy(m1
,z1
,x2
,y3
);
228 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
237 using namespace boost::qvm
;
238 for( float x1
=0; x1
<6.28f
; x1
+=0.5f
)
239 for( float z2
=0; z2
<6.28f
; z2
+=0.5f
)
240 for( float x3
=0; x3
<6.28f
; x3
+=0.5f
)
242 mat
<float,D
,D
> const m2
= rotx_mat
<D
>(x1
) * rotz_mat
<D
>(z2
) * rotx_mat
<D
>(x3
);
244 mat
<float,D
,D
> m1
= rot_mat_xzx
<D
>(x1
,z2
,x3
);
245 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
248 mat
<float,D
,D
> m1
; set_rot_xzx(m1
,x1
,z2
,x3
);
249 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
252 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_xzx(m1
,x1
,z2
,x3
);
253 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
262 using namespace boost::qvm
;
263 for( float x1
=0; x1
<6.28f
; x1
+=0.5f
)
264 for( float y2
=0; y2
<6.28f
; y2
+=0.5f
)
265 for( float x3
=0; x3
<6.28f
; x3
+=0.5f
)
267 mat
<float,D
,D
> const m2
= rotx_mat
<D
>(x1
) * roty_mat
<D
>(y2
) * rotx_mat
<D
>(x3
);
269 mat
<float,D
,D
> m1
= rot_mat_xyx
<D
>(x1
,y2
,x3
);
270 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
273 mat
<float,D
,D
> m1
; set_rot_xyx(m1
,x1
,y2
,x3
);
274 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
277 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_xyx(m1
,x1
,y2
,x3
);
278 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
287 using namespace boost::qvm
;
288 for( float y1
=0; y1
<6.28f
; y1
+=0.5f
)
289 for( float x2
=0; x2
<6.28f
; x2
+=0.5f
)
290 for( float y3
=0; y3
<6.28f
; y3
+=0.5f
)
292 mat
<float,D
,D
> const m2
= roty_mat
<D
>(y1
) * rotx_mat
<D
>(x2
) * roty_mat
<D
>(y3
);
294 mat
<float,D
,D
> m1
= rot_mat_yxy
<D
>(y1
,x2
,y3
);
295 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
298 mat
<float,D
,D
> m1
; set_rot_yxy(m1
,y1
,x2
,y3
);
299 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
302 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_yxy(m1
,y1
,x2
,y3
);
303 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
312 using namespace boost::qvm
;
313 for( float y1
=0; y1
<6.28f
; y1
+=0.5f
)
314 for( float z2
=0; z2
<6.28f
; z2
+=0.5f
)
315 for( float y3
=0; y3
<6.28f
; y3
+=0.5f
)
317 mat
<float,D
,D
> const m2
= roty_mat
<D
>(y1
) * rotz_mat
<D
>(z2
) * roty_mat
<D
>(y3
);
319 mat
<float,D
,D
> m1
= rot_mat_yzy
<D
>(y1
,z2
,y3
);
320 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
323 mat
<float,D
,D
> m1
; set_rot_yzy(m1
,y1
,z2
,y3
);
324 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
327 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_yzy(m1
,y1
,z2
,y3
);
328 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
337 using namespace boost::qvm
;
338 for( float z1
=0; z1
<6.28f
; z1
+=0.5f
)
339 for( float y2
=0; y2
<6.28f
; y2
+=0.5f
)
340 for( float z3
=0; z3
<6.28f
; z3
+=0.5f
)
342 mat
<float,D
,D
> const m2
= rotz_mat
<D
>(z1
) * roty_mat
<D
>(y2
) * rotz_mat
<D
>(z3
);
344 mat
<float,D
,D
> m1
= rot_mat_zyz
<D
>(z1
,y2
,z3
);
345 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
348 mat
<float,D
,D
> m1
; set_rot_zyz(m1
,z1
,y2
,z3
);
349 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
352 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_zyz(m1
,z1
,y2
,z3
);
353 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
362 using namespace boost::qvm
;
363 for( float z1
=0; z1
<6.28f
; z1
+=0.5f
)
364 for( float x2
=0; x2
<6.28f
; x2
+=0.5f
)
365 for( float z3
=0; z3
<6.28f
; z3
+=0.5f
)
367 mat
<float,D
,D
> const m2
= rotz_mat
<D
>(z1
) * rotx_mat
<D
>(x2
) * rotz_mat
<D
>(z3
);
369 mat
<float,D
,D
> m1
= rot_mat_zxz
<D
>(z1
,x2
,z3
);
370 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
373 mat
<float,D
,D
> m1
; set_rot_zxz(m1
,z1
,x2
,z3
);
374 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
377 mat
<float,D
,D
> m1
= identity_mat
<float,D
>(); rotate_zxz(m1
,z1
,x2
,z3
);
378 BOOST_QVM_TEST_CLOSE(m1
.a
,m2
.a
,0.0002f
);
432 return boost::report_errors();