]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/slerp_test.cpp
1 // Copyright 2008-2022 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 #ifdef BOOST_QVM_TEST_SINGLE_HEADER
7 # include BOOST_QVM_TEST_SINGLE_HEADER
9 # include <boost/qvm/quat_operations.hpp>
10 # include <boost/qvm/quat.hpp>
13 #include "test_qvm_quaternion.hpp"
21 using namespace boost::qvm
;
23 test_qvm::quaternion
<Q1
> a
=rotx_quat(1.0f
);
24 test_qvm::quaternion
<Q1
> b
=rotx_quat(.5f
);
25 test_qvm::quaternion
<Q1
> aa
=slerp(a
,b
,0);
26 test_qvm::quaternion
<Q1
> bb
=slerp(a
,b
,1);
27 BOOST_QVM_TEST_CLOSE(aa
.a
,a
.a
,0.0001f
);
28 BOOST_QVM_TEST_CLOSE(bb
.a
,b
.a
,0.0001f
);
30 for( float a1
=0; a1
<6.28f
; a1
+=0.3f
)
32 test_qvm::quaternion
<Q1
> const qx1
=rotx_quat(a1
);
33 test_qvm::quaternion
<Q1
> const qy1
=roty_quat(a1
);
34 test_qvm::quaternion
<Q1
> const qz1
=rotz_quat(a1
);
35 for( float a2
=0; a2
<6.28f
; a2
+=0.05f
)
37 test_qvm::quaternion
<Q1
> const qx2
=rotx_quat(a2
);
38 test_qvm::quaternion
<Q1
> const qy2
=roty_quat(a2
);
39 test_qvm::quaternion
<Q1
> const qz2
=rotz_quat(a2
);
40 for( float t
=0; t
<1; t
+=0.03f
)
42 test_qvm::quaternion
<Q1
> const qx
=rotx_quat(a1
*(1-t
)+a2
*t
);
43 test_qvm::quaternion
<Q1
> const qy
=roty_quat(a1
*(1-t
)+a2
*t
);
44 test_qvm::quaternion
<Q1
> const qz
=rotz_quat(a1
*(1-t
)+a2
*t
);
45 test_qvm::quaternion
<Q1
> const qsx
=slerp(qx1
,qx2
,t
);
46 test_qvm::quaternion
<Q1
> const qsy
=slerp(qref(qy1
),qy2
,t
);
47 test_qvm::quaternion
<Q1
> const qsz
=slerp(qz1
,qref(qz2
),t
);
48 BOOST_QVM_TEST_CLOSE(qx
.a
,qsx
.a
,0.001f
);
49 BOOST_QVM_TEST_CLOSE(qy
.a
,qsy
.a
,0.001f
);
50 BOOST_QVM_TEST_CLOSE(qz
.a
,qsz
.a
,0.001f
);
61 return boost::report_errors();