Angles (geometric), normalization and conversion: Difference between revisions
Content added Content deleted
(C++ entry) |
|||
Line 402: | Line 402: | ||
1000000 1600 Mils 90 100 1600 1.5708 |
1000000 1600 Mils 90 100 1600 1.5708 |
||
1000000 5.9256 Radians 339.5132 377.2368 6035.7895 5.9256</pre> |
1000000 5.9256 Radians 339.5132 377.2368 6035.7895 5.9256</pre> |
||
=={{header|C++}}== |
|||
<lang cpp>#include <functional> |
|||
#include <iostream> |
|||
#include <iomanip> |
|||
#include <math.h> |
|||
#include <vector> |
|||
template<typename T, const int P> |
|||
T normalize(T a) { return std::fmod(a, P); } |
|||
inline double d2d(double a) { return normalize<double, 360>(a); } |
|||
inline double g2g(double a) { return normalize<double, 400>(a); } |
|||
inline double m2m(double a) { return normalize<double, 6400>(a); } |
|||
inline double r2r(double a) { return d2d(a * 180 / M_PI) * M_PI / 180; } |
|||
double d2g(double a) { return g2g(a * 10 / 9); } |
|||
double d2m(double a) { return m2m(a * 160 / 9); } |
|||
double d2r(double a) { return r2r(a * M_PI / 180); } |
|||
double g2d(double a) { return d2d(a * 9 / 10); } |
|||
double g2m(double a) { return m2m(a * 16); } |
|||
double g2r(double a) { return r2r(a * M_PI / 200); } |
|||
double m2d(double a) { return d2d(a * 9 / 160); } |
|||
double m2g(double a) { return g2g(a / 16); } |
|||
double m2r(double a) { return r2r(a * M_PI / 3200); } |
|||
double r2d(double a) { return d2d(a * 180 / M_PI); } |
|||
double r2g(double a) { return g2g(a * 200 / M_PI); } |
|||
double r2m(double a) { return m2m(a * 3200 / M_PI); } |
|||
void print(const std::vector<double> &values, const char *s, const char *unit, std::function<double(double)> f) { |
|||
using namespace std; |
|||
cout << "┌─────────────────┬─────────────┬──────────────┐\n"; |
|||
cout << "│ value │ unit(s) │ " << setw(12) << s << " │\n"; |
|||
cout << "├─────────────────┼─────────────┼──────────────┤\n"; |
|||
for (double i : values) { |
|||
cout << "│ " << setw(15); |
|||
if (i == 0.) |
|||
cout << "0 " << defaultfloat << " │ " << setw(12) << unit << "| " << setw(12) << "0 "; |
|||
else |
|||
cout << fixed << i << defaultfloat << " │ " << setw(12) << unit << "| " << setw(12) << fixed << f(i); |
|||
cout << defaultfloat << " │\n"; |
|||
} |
|||
cout << "└─────────────────┴─────────────┴──────────────┘\n"; |
|||
} |
|||
int main() { |
|||
std::vector<double> values = { -2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795, 359, 399, 6399, 1000000 }; |
|||
print(values, "normalized", "deg ", d2d); |
|||
print(values, "normalized", "grad ", g2g); |
|||
print(values, "normalized", "mil ", m2m); |
|||
print(values, "normalized", "rad ", r2r); |
|||
print(values, "converted", "deg -> grad ", d2g); |
|||
print(values, "converted", "deg -> mil ", d2m); |
|||
print(values, "converted", "deg -> rad ", d2r); |
|||
print(values, "converted", "grad -> deg ", g2d); |
|||
print(values, "converted", "grad -> mil ", g2m); |
|||
print(values, "converted", "grad -> rad ", g2r); |
|||
print(values, "converted", "mil -> deg ", m2d); |
|||
print(values, "converted", "mil -> grad ", m2g); |
|||
print(values, "converted", "mil -> rad ", m2r); |
|||
print(values, "converted", "rad -> deg ", r2d); |
|||
print(values, "converted", "rad -> grad ", r2g); |
|||
print(values, "converted", "rad -> mil ", r2m); |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>┌─────────────────┬─────────────┬──────────────┐ |
|||
│ value │ unit(s) │ normalized │ |
|||
├─────────────────┼─────────────┼──────────────┤ |
|||
│ -2.000000 │ deg | -2.000000 │ |
|||
│ -1.000000 │ deg | -1.000000 │ |
|||
│ 0 │ deg | 0 │ |
|||
│ 1.000000 │ deg | 1.000000 │ |
|||
│ 2.000000 │ deg | 2.000000 │ |
|||
│ 6.283185 │ deg | 6.283185 │ |
|||
│ 16.000000 │ deg | 16.000000 │ |
|||
│ 57.295780 │ deg | 57.295780 │ |
|||
│ 359.000000 │ deg | 359.000000 │ |
|||
│ 399.000000 │ deg | 39.000000 │ |
|||
│ 6399.000000 │ deg | 279.000000 │ |
|||
│ 1000000.000000 │ deg | 280.000000 │ |
|||
└─────────────────┴─────────────┴──────────────┘ |
|||
... |
|||
┌─────────────────┬─────────────┬──────────────┐ |
|||
│ value │ unit(s) │ converted │ |
|||
├─────────────────┼─────────────┼──────────────┤ |
|||
│ -2.000000 │ rad -> mil | -2037.183272 │ |
|||
│ -1.000000 │ rad -> mil | -1018.591636 │ |
|||
│ 0 │ rad -> mil | 0 │ |
|||
│ 1.000000 │ rad -> mil | 1018.591636 │ |
|||
│ 2.000000 │ rad -> mil | 2037.183272 │ |
|||
│ 6.283185 │ rad -> mil | 6399.999993 │ |
|||
│ 16.000000 │ rad -> mil | 3497.466173 │ |
|||
│ 57.295780 │ rad -> mil | 761.001765 │ |
|||
│ 359.000000 │ rad -> mil | 874.397248 │ |
|||
│ 399.000000 │ rad -> mil | 3218.062679 │ |
|||
│ 6399.000000 │ rad -> mil | 2767.877408 │ |
|||
│ 1000000.000000 │ rad -> mil | 6035.788130 │ |
|||
└─────────────────┴─────────────┴──────────────┘</pre> |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |