]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/qvm/doc/source/tutorial.cpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / qvm / doc / source / tutorial.cpp
CommitLineData
7c673cae
FG
1//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
2
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)
5
6#include <boost/qvm/operations.hpp>
7#include <boost/qvm/map_mat_mat.hpp>
8#include <boost/qvm/map_mat_vec.hpp>
9#include <boost/qvm/map_vec_mat.hpp>
10#include <boost/qvm/vec_access.hpp>
11#include <boost/qvm/vec_traits_array.hpp>
12#include <boost/qvm/quat.hpp>
13#include <boost/qvm/vec.hpp>
14#include <boost/qvm/mat.hpp>
15#include <boost/qvm/swizzle.hpp>
16using namespace boost::qvm;
17
18struct float3 { float a[3]; };
19struct float4 { float a[4]; };
20struct float33 { float a[3][3]; };
21struct fquat { float a[4]; };
22
23namespace
24boost
25 {
26 namespace
27 qvm
28 {
29 template <>
30 struct
31 vec_traits<float3>
32 {
33 static int const dim=3;
34 typedef float scalar_type;
35
36 template <int I> static inline scalar_type & write_element( float3 & v ) { return v.a[I]; }
37 template <int I> static inline scalar_type read_element( float3 const & v ) { return v.a[I]; }
38
39 static inline scalar_type & write_element_idx( int i, float3 & v ) { return v.a[i]; }
40 static inline scalar_type read_element_idx( int i, float3 const & v ) { return v.a[i]; }
41 };
42
43 template <>
44 struct
45 vec_traits<float4>
46 {
47 static int const dim=4;
48 typedef float scalar_type;
49
50 template <int I> static inline scalar_type & write_element( float4 & v ) { return v.a[I]; }
51 template <int I> static inline scalar_type read_element( float4 const & v ) { return v.a[I]; }
52
53 static inline scalar_type & write_element_idx( int i, float4 & v ) { return v.a[i]; }
54 static inline scalar_type read_element_idx( int i, float4 const & v ) { return v.a[i]; }
55 };
56
57 template <>
58 struct
59 mat_traits<float33>
60 {
61 typedef float scalar_type;
62 static int const rows=3;
63 static int const cols=3;
64
65 template <int R,int C>
66 static inline scalar_type & write_element( float33 & m ) { return m.a[R][C]; }
67
68 template <int R,int C>
69 static inline scalar_type read_element( float33 const & m ) { return m.a[R][C]; }
70
71 static inline scalar_type & write_element_idx( int r, int c, float33 & m ) { return m.a[r][c]; }
72 static inline scalar_type read_element_idx( int r, int c, float33 const & m ) { return m.a[r][c]; }
73 };
74
75 template <>
76 struct
77 quat_traits<fquat>
78 {
79 typedef float scalar_type;
80
81 template <int I> static inline scalar_type & write_element( float4 & v ) { return v.a[I]; }
82 template <int I> static inline scalar_type read_element( float4 const & v ) { return v.a[I]; }
83
84 static inline scalar_type & write_element_idx( int i, float4 & v ) { return v.a[i]; }
85 static inline scalar_type read_element_idx( int i, float4 const & v ) { return v.a[i]; }
86 };
87 }
88 }
89
90void
91f()
92 {
93 {
94 quat<float> rx=rotx_quat(3.14159f);
95 }
96
97 {
98 vec<float,3> v={0,1,0};
99 mat<float,4,4> tr=translation_mat(v);
100 }
101
102 {
103 float3 v;
104 X(v) = 0;
105 Y(v) = 0;
106 Z(v) = 7;
107 float vmag = mag(v);
108 float33 m = rotx_mat<3>(3.14159f);
109 float3 vrot = m * v;
110 }
111
112 {
113 float v[3] = {0,0,7};
114 float3 vrot = rotx_mat<3>(3.14159f) * v;
115 }
116
117 {
118 float3 v = {0,0,7};
119 float3 vrot = transposed(rotx_mat<3>(3.14159f)) * v;
120 }
121
122 {
123 float3 v = {0,0,7};
124 YXZ(v) = rotx_mat<3>(3.14159f) * v;
125 }
126
127 {
128 float3 v = {0,0,7};
129 float4 point = XYZ1(v); //{0,0,7,1}
130 float4 vector = XYZ0(v); //{0,0,7,0}
131 }
132
133 {
134 float3 v = {0,0,7};
135 float4 v1 = ZZZZ(v); //{7,7,7,7}
136 }
137
138 {
139 float v[3] = {0,0,7};
140 vref(v) *= 42;
141 }
142 }
143
144void
145multiply_column1( float33 & m, float scalar )
146 {
147 col<1>(m) *= scalar;
148 }