Trigonomectric constants Polar and spherical to rectangular coordinates transform

Dependents:   DISCO-F746NG_Lidar ZAILLEL_Interface

Trigo.h

Committer:
cromda
Date:
2012-11-26
Revision:
4:a6b0fd2c4f85
Parent:
3:7b8333402db0
Child:
5:b07cac89c306

File content as of revision 4:a6b0fd2c4f85:

/* mbed Trigonometric constants and utilities
 * remi cormier 2012
 */

#ifndef MBED_TRIGO_H
#define MBED_TRIGO_H

/** Example code
* @code
* #include "mbed.h"
* #include "Trigo.h"
* 
* Serial pc(USBTX, USBRX);
* 
* const float Dmax = 1.0; // coordinate ranges from -Dmax to +Dmax
* float N = 1;            // 2*N+1 step in range

* const float pas=Dmax/N;
* float X;
* float Y;
* float Z;
* float R;
* float A;
* float B;
* 
* int main() {
* // print Pi do PC
* pc.printf("pi = %.9f\n\r",Pi);
* 
* // Recpol dand PolRec test
* pc.printf("RecPol et PolRec\n\r");
* 
* for(float i=-N; i<=N; i+=1)
* {for (float j=-N; j<=N;j+=1)
*   {X=i*pas;
*   Y=j*pas;
*   RecPol(X,Y,&R,&A);                                                        // rectangular to polar
*   pc.printf("X : %+.9f Y : %+.9f R : %+.9f A : %+9.4f\n\r",X,Y,R,A/degre); 
*   PolRec(R,A,&X,&Y);                                                        // polar to rectangular
*   pc.printf("X : %+.9f Y : %+.9f R : %+.9f A : %+9.4f\n\r",X,Y,R,A/degre);
*   }
* }
* pc.printf("\n\r");
* 
* // RecSph and SphRec test
* pc.printf("RecSph et SphRec\n\r");
* 
* for (float i=-N;i<=N;i+=1)
*     {for (float j=-N;j<=N;j+=1)
*         {for (float k=-N;k<=N;k+=1)
*             {X=i*pas;
*              Y=j*pas;
*              Z=k*pas;
*              RecSph(X,Y,Z,&R,&A,&B);                                        // Rectangular to spherical
*              pc.printf("X : %+.9f Y : %+.9f Z : %+.9f R : %+.9f A : %+9.4f B : %+9.4f\n\r",X,Y,Z,R,A/degre,B/degre);
*              SphRec(R,A,B,&X,&Y,&Z);                                        // Spherical to rectangular 
*              pc.printf("X : %+.9f Y : %+.9f Z : %+.9f R : %+.9f A : %+9.4f B : %+9.4f\n\r",X,Y,Z,R,A/degre,B/degre);
*             }
*         }
*     }
* }
* @endcode
*/


/** Pi
*
* @param pi : pi
*/
const float Pi     = 3.141592653590;

/** pi/2
*
* @param halfPi : pi/2
*/
const float halfPi = Pi/2.0;

/** 2 pi
*
* @param twoPi : 2*pi
*/
const float twoPi  = 2.0*Pi;

/** degre
*
* @param degre = pi/180
*/
const float degre  = Pi/180.0;

/** rectangular to polar coordinates (r : radius, a : angle) transform
*
* @param x : x coordinate
* @param y : y coordinate
* @param r : radius 
* @param a : angle (radian, counterclockwise)
*/
void RecPol(float x, float y, float *r, float *a);

/** polar to rectangular coordinates transform
*
* @param r : radius
* @param a : angle (radian, counterclockwise)
* @param x : x coordinate
* @param y : y coordinate
*/
void PolRec(float r, float a, float *x, float *y);

/** Rectangular to spherical coordinates transform
* 
* @param x : x coordinate
* @param y : y coordinate
* @param z : z coordinate
* @param r : radius
* @param a : angle in xy plane (longitude) ; radian counter clockwise
* @param b : angle above xy plane ; radian
*/
void RecSph(float x, float y, float z, float *r, float *a, float *b);

/** Spherical to rectangular coordinates transform
* 
* @param r : radius
* @param a : angle in xy plane (longitude) ; radian counter clockwise
* @param b : angle above xy plane ; radian
* @param x : x coordinate
* @param y : y coordinate
* @param z : z coordinate
*/


void SphRec(float r, float a, float b, float *x, float *y, float *z);

#endif