140 {
141 const RealType abs_value = std::abs(value);
142 const RealType pi = std::numbers::pi_v<RealType>;
144
146 if (abs_value <= kEpsilon)
147 {
148 return result;
149 }
150
151 if (abs_value > 360.0)
152 {
154 }
155 else if (abs_value > 180.0)
156 {
158 }
159 else if (abs_value > two_pi)
160 {
162 }
163 else if (abs_value > pi)
164 {
166 }
167
168 const bool degree_famous = matches_common_angle(abs_value, common_degree_angles);
169 const bool radian_famous = matches_common_angle(abs_value, common_radian_angles);
170 if (degree_famous && !radian_famous)
171 {
173 }
174 else if (radian_famous && !degree_famous)
175 {
177 }
178
179 if (is_near_integer(abs_value))
180 {
181 const RealType rounded = std::round(abs_value);
182 if ((std::fmod(rounded, 45.0) == 0.0) || (std::fmod(rounded, 30.0) == 0.0) ||
183 (std::fmod(rounded, 15.0) == 0.0) || (std::fmod(rounded, 10.0) == 0.0) ||
184 (std::fmod(rounded, 5.0) == 0.0))
185 {
187 }
188 else
189 {
191 }
192 }
193 else if ((abs_value <= two_pi + 1.0) && !is_near_tenth(abs_value))
194 {
196 }
197
198 if (matches_simple_pi_ratio(abs_value))
199 {
201 }
202
203 if ((kind == ValueKind::Angle) && (abs_value <= two_pi + 0.5) &&
205 {
206 const RealType degree_distance = best_clean_trig_distance(value * pi / 180.0);
207 const RealType radian_distance = best_clean_trig_distance(value);
208 if (degree_distance + 1e-4 < radian_distance)
209 {
211 }
212 else if (radian_distance + 1e-4 < degree_distance)
213 {
215 }
216 }
217
219 {
221 return result;
222 }
223
228
229 if ((lead >= 5) || ((max_score >= 7) && (lead >= 3)))
230 {
232 }
233 else if ((lead >= 3) || ((max_score >= 5) && (lead >= 2)))
234 {
236 }
237 else if ((lead >= 2) || (max_score >= 4))
238 {
240 }
241
242 return result;
243 }
double RealType
Type for real numbers.
@ Radians
Compass azimuth and elevation expressed in radians.
@ Degrees
Compass azimuth and elevation expressed in degrees.
params::RotationAngleUnit inferred_unit