OGLplus  (0.59.0) a C++ wrapper for rendering APIs

angle.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_UNITS_UNIT_SI_ANGLE_HPP
10 #define EAGINE_UNITS_UNIT_SI_ANGLE_HPP
11 
12 #include "common.hpp"
13 
14 namespace eagine::units {
15 namespace base {
16 
17 // radian
18 struct radian : unit<angle, radian> {};
19 
20 // degree
21 using degree =
22  scaled_unit<scales::divided<scales::pi, scales::constant<180>>, radian>;
23 
24 // gradian
25 using gradian =
26  scaled_unit<scales::divided<scales::pi, scales::constant<200>>, radian>;
27 
28 // quarter
29 using quarter =
30  scaled_unit<scales::multiplied<scales::pi, scales::rational<1, 2>>, radian>;
31 
32 // turn
33 using turn =
34  scaled_unit<scales::multiplied<scales::constant<2>, scales::pi>, radian>;
35 
36 } // namespace base
37 
38 template <>
39 struct name_of<base::radian> {
40  static constexpr const char mp_str[] = "radian";
41 };
42 
43 template <>
44 struct symbol_of<base::radian> {
45  static constexpr const char mp_str[] = "rad";
46 };
47 
48 template <>
49 struct name_of<base::degree> {
50  static constexpr const char mp_str[] = "degree";
51 };
52 
53 template <>
54 struct symbol_of<base::degree> {
55  static constexpr const char mp_str[] = {char(0xC2), char(0xB0), '\0'};
56 };
57 
58 template <>
59 struct name_of<base::gradian> {
60  static constexpr const char mp_str[] = "gradian";
61 };
62 
63 template <>
64 struct symbol_of<base::gradian> {
65  static constexpr const char mp_str[] = "grad";
66 };
67 
68 template <>
69 struct name_of<base::quarter> {
70  static constexpr const char mp_str[] = "quarter";
71 };
72 
73 template <>
74 struct symbol_of<base::quarter> {
75  static constexpr const char mp_str[] = "Q";
76 };
77 
78 template <>
79 struct name_of<base::turn> {
80  static constexpr const char mp_str[] = "turn";
81 };
82 
83 template <>
84 struct symbol_of<base::turn> {
85  static constexpr const char mp_str[] = "r";
86 };
87 
88 // si::base_unit<angle>
89 template <>
90 struct si::base_unit<base::angle> : base::radian {};
91 
92 // radian
93 using radian = unit<angle, si>;
94 
95 // derived
96 using degree = make_scaled_base_dim_unit_t<base::degree, si>;
97 using gradian = make_scaled_base_dim_unit_t<base::gradian, si>;
98 using quarter = make_scaled_base_dim_unit_t<base::quarter, si>;
99 using turn = make_scaled_base_dim_unit_t<base::turn, si>;
100 
101 using pi_rad =
102  make_scaled_base_dim_unit_t<base::scaled_unit<scales::pi, base::radian>, si>;
103 
104 } // namespace eagine::units
105 
106 #endif // EAGINE_UNITS_UNIT_SI_ANGLE_HPP
static constexpr const auto pi
The pi constant.
Definition: constants.hpp:23

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).