Bayley Wang
/
foc-ed_in_the_bot_compact
robot
Embed:
(wiki syntax)
Show/hide line numbers
MathHelpers.cpp
00001 #include "MathHelpers.h" 00002 #include "math.h" 00003 00004 float map(float x, float in_min, float in_max, float out_min, float out_max) 00005 { 00006 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; 00007 } 00008 00009 float constrain(float in, float min, float max) 00010 { 00011 if(in > max) return max; 00012 if(in < min) return min; 00013 return in; 00014 } 00015 00016 float constrain_norm(float *x, float *y, float coeffx, float coeffy, float max) { 00017 float norm = sqrtf(coeffx * *x * *x + coeffy * *y * *y); 00018 if (norm > max) { 00019 *x /= (norm / max); 00020 *y /= (norm / max); 00021 } 00022 return norm; 00023 } 00024 00025 float fminf(float a, float b) { 00026 if(a < b) return a; 00027 return b; 00028 } 00029 00030 float fmaxf(float a, float b) { 00031 if(a > b) return a; 00032 return b; 00033 } 00034 00035 float update_filter(float old, float x, float str) { 00036 return str * old + (1.0f - str) * x; 00037 } 00038 00039 float acbrt(float x0) { 00040 union { int ix; float x; }; 00041 00042 x = x0; 00043 ix = 0x2a5137a0 + ix / 3; 00044 x = 0.33333333f*(2.0f*x + x0 / (x * x)); 00045 00046 return x; 00047 } 00048 00049 float aatan2(float q, float d) { 00050 if (q > 0.f && d < 0.f && -d < q) { 00051 return d * q / (q * q + 0.28125f * d * d);; 00052 } 00053 else if (q > 0.f && d < 0.f && -d > q) { 00054 return -M_PI / 2.f - d * q / (d * d + 0.28125f * q * q);; 00055 } 00056 else if (q < 0.f && d < 0.f && -d > -q) { 00057 return M_PI / 2.f - d * q / (d * d + 0.28125f * q * q); 00058 } 00059 else if (q < 0.f && d < 0.f && -d < -q) { 00060 return d * q / (q * q + 0.28125f * d * d);; 00061 } 00062 else if (q < 0.f && d > 0.f && d < -q) { 00063 return d * q / (q * q + 0.28125f * d * d);; 00064 } 00065 else if (q < 0.f && d > 0.f && d > -q) { 00066 return -M_PI / 2.f - d * q / (d * d + 0.28125f * q * q);; 00067 } 00068 else if (q > 0.f && d > 0.f && d > q) { 00069 return M_PI / 2.f - d * q / (d * d + 0.28125f * q * q);; 00070 } 00071 else { 00072 return d * q / (q * q + 0.28125f * d * d);; 00073 } 00074 }
Generated on Tue Jul 12 2022 17:58:39 by 1.7.2