Ben Katz / Mbed 2 deprecated Pendulum_demo

Dependencies:   mbed Eigen

Committer:
benkatz
Date:
Tue May 07 01:56:53 2019 +0000
Revision:
0:4dd2d995f7d0
works with the python side control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benkatz 0:4dd2d995f7d0 1
benkatz 0:4dd2d995f7d0 2 #include "../math_ops.h"
benkatz 0:4dd2d995f7d0 3
benkatz 0:4dd2d995f7d0 4
benkatz 0:4dd2d995f7d0 5 float fmaxf(float x, float y){
benkatz 0:4dd2d995f7d0 6 /// Returns maximum of x, y ///
benkatz 0:4dd2d995f7d0 7 return (((x)>(y))?(x):(y));
benkatz 0:4dd2d995f7d0 8 }
benkatz 0:4dd2d995f7d0 9
benkatz 0:4dd2d995f7d0 10 float fminf(float x, float y){
benkatz 0:4dd2d995f7d0 11 /// Returns minimum of x, y ///
benkatz 0:4dd2d995f7d0 12 return (((x)<(y))?(x):(y));
benkatz 0:4dd2d995f7d0 13 }
benkatz 0:4dd2d995f7d0 14
benkatz 0:4dd2d995f7d0 15 float fmaxf3(float x, float y, float z){
benkatz 0:4dd2d995f7d0 16 /// Returns maximum of x, y, z ///
benkatz 0:4dd2d995f7d0 17 return (x > y ? (x > z ? x : z) : (y > z ? y : z));
benkatz 0:4dd2d995f7d0 18 }
benkatz 0:4dd2d995f7d0 19
benkatz 0:4dd2d995f7d0 20 float fminf3(float x, float y, float z){
benkatz 0:4dd2d995f7d0 21 /// Returns minimum of x, y, z ///
benkatz 0:4dd2d995f7d0 22 return (x < y ? (x < z ? x : z) : (y < z ? y : z));
benkatz 0:4dd2d995f7d0 23 }
benkatz 0:4dd2d995f7d0 24
benkatz 0:4dd2d995f7d0 25 float roundf(float x){
benkatz 0:4dd2d995f7d0 26 /// Returns nearest integer ///
benkatz 0:4dd2d995f7d0 27
benkatz 0:4dd2d995f7d0 28 return x < 0.0f ? ceilf(x - 0.5f) : floorf(x + 0.5f);
benkatz 0:4dd2d995f7d0 29 }
benkatz 0:4dd2d995f7d0 30
benkatz 0:4dd2d995f7d0 31 void limit_norm(float *x, float *y, float limit){
benkatz 0:4dd2d995f7d0 32 /// Scales the lenght of vector (x, y) to be <= limit ///
benkatz 0:4dd2d995f7d0 33 float norm = sqrt(*x * *x + *y * *y);
benkatz 0:4dd2d995f7d0 34 if(norm > limit){
benkatz 0:4dd2d995f7d0 35 *x = *x * limit/norm;
benkatz 0:4dd2d995f7d0 36 *y = *y * limit/norm;
benkatz 0:4dd2d995f7d0 37 }
benkatz 0:4dd2d995f7d0 38 }
benkatz 0:4dd2d995f7d0 39
benkatz 0:4dd2d995f7d0 40 void limit(float *x, float min, float max){
benkatz 0:4dd2d995f7d0 41 *x = fmaxf(fminf(*x, max), min);
benkatz 0:4dd2d995f7d0 42 }
benkatz 0:4dd2d995f7d0 43
benkatz 0:4dd2d995f7d0 44 int float_to_uint(float x, float x_min, float x_max, int bits){
benkatz 0:4dd2d995f7d0 45 /// Converts a float to an unsigned int, given range and number of bits ///
benkatz 0:4dd2d995f7d0 46 float span = x_max - x_min;
benkatz 0:4dd2d995f7d0 47 float offset = x_min;
benkatz 0:4dd2d995f7d0 48 return (int) ((x-offset)*((float)((1<<bits)-1))/span);
benkatz 0:4dd2d995f7d0 49 }
benkatz 0:4dd2d995f7d0 50
benkatz 0:4dd2d995f7d0 51
benkatz 0:4dd2d995f7d0 52 float uint_to_float(int x_int, float x_min, float x_max, int bits){
benkatz 0:4dd2d995f7d0 53 /// converts unsigned int to float, given range and number of bits ///
benkatz 0:4dd2d995f7d0 54 float span = x_max - x_min;
benkatz 0:4dd2d995f7d0 55 float offset = x_min;
benkatz 0:4dd2d995f7d0 56 return ((float)x_int)*span/((float)((1<<bits)-1)) + offset;
benkatz 0:4dd2d995f7d0 57 }