9 #ifndef EAGINE_UNITS_UNIT_SI_ANGLE_HPP
10 #define EAGINE_UNITS_UNIT_SI_ANGLE_HPP
14 namespace eagine::units {
18 struct radian : unit<angle, radian> {};
22 scaled_unit<scales::divided<scales::pi, scales::constant<180>>, radian>;
26 scaled_unit<scales::divided<scales::pi, scales::constant<200>>, radian>;
30 scaled_unit<scales::multiplied<scales::pi, scales::rational<1, 2>>, radian>;
34 scaled_unit<scales::multiplied<scales::constant<2>,
scales::pi>, radian>;
39 struct name_of<base::radian> {
40 static constexpr
const char mp_str[] =
"radian";
44 struct symbol_of<base::radian> {
45 static constexpr
const char mp_str[] =
"rad";
49 struct name_of<base::degree> {
50 static constexpr
const char mp_str[] =
"degree";
54 struct symbol_of<base::degree> {
55 static constexpr
const char mp_str[] = {char(0xC2), char(0xB0),
'\0'};
59 struct name_of<base::gradian> {
60 static constexpr
const char mp_str[] =
"gradian";
64 struct symbol_of<base::gradian> {
65 static constexpr
const char mp_str[] =
"grad";
69 struct name_of<base::quarter> {
70 static constexpr
const char mp_str[] =
"quarter";
74 struct symbol_of<base::quarter> {
75 static constexpr
const char mp_str[] =
"Q";
79 struct name_of<base::turn> {
80 static constexpr
const char mp_str[] =
"turn";
84 struct symbol_of<base::turn> {
85 static constexpr
const char mp_str[] =
"r";
90 struct si::base_unit<base::angle> : base::radian {};
93 using radian = unit<angle, si>;
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>;
102 make_scaled_base_dim_unit_t<base::scaled_unit<scales::pi, base::radian>, si>;
106 #endif // EAGINE_UNITS_UNIT_SI_ANGLE_HPP