]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/slerp_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/quat_operations.hpp>
7 #include <boost/qvm/quat.hpp>
8 #include "test_qvm_quaternion.hpp"
16 using namespace boost::qvm
;
18 test_qvm::quaternion
<Q1
> a
=rotx_quat(1.0f
);
19 test_qvm::quaternion
<Q1
> b
=rotx_quat(.5f
);
20 test_qvm::quaternion
<Q1
> aa
=slerp(a
,b
,0);
21 test_qvm::quaternion
<Q1
> bb
=slerp(a
,b
,1);
22 BOOST_QVM_TEST_CLOSE(aa
.a
,a
.a
,0.0001f
);
23 BOOST_QVM_TEST_CLOSE(bb
.a
,b
.a
,0.0001f
);
25 for( float a1
=0; a1
<6.28f
; a1
+=0.3f
)
27 test_qvm::quaternion
<Q1
> const qx1
=rotx_quat(a1
);
28 test_qvm::quaternion
<Q1
> const qy1
=roty_quat(a1
);
29 test_qvm::quaternion
<Q1
> const qz1
=rotz_quat(a1
);
30 for( float a2
=0; a2
<6.28f
; a2
+=0.05f
)
32 test_qvm::quaternion
<Q1
> const qx2
=rotx_quat(a2
);
33 test_qvm::quaternion
<Q1
> const qy2
=roty_quat(a2
);
34 test_qvm::quaternion
<Q1
> const qz2
=rotz_quat(a2
);
35 for( float t
=0; t
<1; t
+=0.03f
)
37 test_qvm::quaternion
<Q1
> const qx
=rotx_quat(a1
*(1-t
)+a2
*t
);
38 test_qvm::quaternion
<Q1
> const qy
=roty_quat(a1
*(1-t
)+a2
*t
);
39 test_qvm::quaternion
<Q1
> const qz
=rotz_quat(a1
*(1-t
)+a2
*t
);
40 test_qvm::quaternion
<Q1
> const qsx
=slerp(qx1
,qx2
,t
);
41 test_qvm::quaternion
<Q1
> const qsy
=slerp(qref(qy1
),qy2
,t
);
42 test_qvm::quaternion
<Q1
> const qsz
=slerp(qz1
,qref(qz2
),t
);
43 BOOST_QVM_TEST_CLOSE(qx
.a
,qsx
.a
,0.001f
);
44 BOOST_QVM_TEST_CLOSE(qy
.a
,qsy
.a
,0.001f
);
45 BOOST_QVM_TEST_CLOSE(qz
.a
,qsz
.a
,0.001f
);
56 return boost::report_errors();