Trigonomectric constants Polar and spherical to rectangular coordinates transform

Dependents:   DISCO-F746NG_Lidar ZAILLEL_Interface

Committer:
cromda
Date:
Sun Nov 25 11:55:27 2012 +0000
Revision:
2:fe695d6c9c83
Parent:
1:eb028056d162
Child:
3:7b8333402db0
Add sample code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cromda 0:2f533ad7c611 1 #ifndef MBED_TRIGO_H
cromda 0:2f533ad7c611 2 #define MBED_TRIGO_H
cromda 0:2f533ad7c611 3
cromda 1:eb028056d162 4 // Trigo Library
cromda 1:eb028056d162 5 // trogonometric constants and utilities
cromda 1:eb028056d162 6 // rémi cormier 2012
cromda 1:eb028056d162 7
cromda 0:2f533ad7c611 8
cromda 0:2f533ad7c611 9 const float Pi=3.141592653590;
cromda 1:eb028056d162 10 const float halfPi=Pi/2.0;
cromda 1:eb028056d162 11 const float twoPi=2.0*Pi;
cromda 1:eb028056d162 12 const float degre=Pi/180.0;// radian
cromda 0:2f533ad7c611 13
cromda 1:eb028056d162 14 // rectangular (x,y) to polar coordinates (r : radius, a : angle) transform
cromda 1:eb028056d162 15 // a is the angle (radian, counter clockwise), with origin on x axis
cromda 1:eb028056d162 16 // -pi <= a <= pi
cromda 0:2f533ad7c611 17 void RecPol(float x, float y, float *r, float *a);
cromda 0:2f533ad7c611 18
cromda 1:eb028056d162 19 // polar (r : radius, a : angle (rd))) to rectangular (x,y) transform
cromda 0:2f533ad7c611 20 void PolRec(float r, float a, float *x, float *y);
cromda 0:2f533ad7c611 21
cromda 1:eb028056d162 22 // Rectangular (x,y,z) to sphérical (r : radius, a : angle, b : angle)
cromda 1:eb028056d162 23 // a is the angle (radian, counter clockwise) betwen the projection of (x,y,z) on xy plane and the x axis
cromda 1:eb028056d162 24 // -pi <= a <= pi
cromda 1:eb028056d162 25 // b is the angle (radian, counter clockwise) betwen (x,y,z) and the xy plane
cromda 1:eb028056d162 26 // -pi/2 <= b <= pi/2
cromda 0:2f533ad7c611 27 void RecSph(float x, float y, float z, float *r, float *a, float *b);
cromda 0:2f533ad7c611 28
cromda 0:2f533ad7c611 29 void SphRec(float r, float a, float b, float *x, float *y, float *z);
cromda 0:2f533ad7c611 30
cromda 2:fe695d6c9c83 31 #endif
cromda 2:fe695d6c9c83 32
cromda 2:fe695d6c9c83 33
cromda 2:fe695d6c9c83 34 /* SAMPLE CODE ****************
cromda 2:fe695d6c9c83 35 #include "mbed.h"
cromda 2:fe695d6c9c83 36 #include "Trigo.h"
cromda 2:fe695d6c9c83 37
cromda 2:fe695d6c9c83 38 Serial pc(USBTX, USBRX);
cromda 2:fe695d6c9c83 39
cromda 2:fe695d6c9c83 40 const float Dmax = 1.0;
cromda 2:fe695d6c9c83 41 float N = 1;
cromda 2:fe695d6c9c83 42 const float pas=Dmax/N;
cromda 2:fe695d6c9c83 43 float X;
cromda 2:fe695d6c9c83 44 float Y;
cromda 2:fe695d6c9c83 45 float Z;
cromda 2:fe695d6c9c83 46 float R;
cromda 2:fe695d6c9c83 47 float A;
cromda 2:fe695d6c9c83 48 float B;
cromda 2:fe695d6c9c83 49
cromda 2:fe695d6c9c83 50 int main() {
cromda 2:fe695d6c9c83 51 // print pi do PC
cromda 2:fe695d6c9c83 52 pc.printf("pi = %.9f\n\r",Pi);
cromda 2:fe695d6c9c83 53
cromda 2:fe695d6c9c83 54 // Recpol dand PolRec test
cromda 2:fe695d6c9c83 55 pc.printf("RecPol et PolRec\n\r");
cromda 2:fe695d6c9c83 56
cromda 2:fe695d6c9c83 57 for(float i=-N; i<=N; i+=1)
cromda 2:fe695d6c9c83 58 {
cromda 2:fe695d6c9c83 59 for (float j=-N; j<=N;j+=1)
cromda 2:fe695d6c9c83 60 {X=i*pas;
cromda 2:fe695d6c9c83 61 Y=j*pas;
cromda 2:fe695d6c9c83 62 RecPol(X,Y,&R,&A);
cromda 2:fe695d6c9c83 63 pc.printf("X : %+.9f Y : %+.9f R : %+.9f A : %+9.4f\n\r",X,Y,R,A/degre);
cromda 2:fe695d6c9c83 64 PolRec(R,A,&X,&Y);
cromda 2:fe695d6c9c83 65 pc.printf("X : %+.9f Y : %+.9f R : %+.9f A : %+9.4f\n\r",X,Y,R,A/degre);
cromda 2:fe695d6c9c83 66 }}
cromda 2:fe695d6c9c83 67 pc.printf("\n\r");
cromda 2:fe695d6c9c83 68
cromda 2:fe695d6c9c83 69 // RecSph and SphRec test
cromda 2:fe695d6c9c83 70 pc.printf("RecSph et SphRec\n\r");
cromda 2:fe695d6c9c83 71
cromda 2:fe695d6c9c83 72 for (float i=-N;i<=N;i+=1)
cromda 2:fe695d6c9c83 73 {for (float j=-N;j<=N;j+=1)
cromda 2:fe695d6c9c83 74 {for (float k=-N;k<=N;k+=1)
cromda 2:fe695d6c9c83 75 {X=i*pas;
cromda 2:fe695d6c9c83 76 Y=j*pas;
cromda 2:fe695d6c9c83 77 Z=k*pas;
cromda 2:fe695d6c9c83 78 RecSph(X,Y,Z,&R,&A,&B);
cromda 2:fe695d6c9c83 79 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);
cromda 2:fe695d6c9c83 80 SphRec(R,A,B,&X,&Y,&Z);
cromda 2:fe695d6c9c83 81 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);
cromda 2:fe695d6c9c83 82 }
cromda 2:fe695d6c9c83 83 }
cromda 2:fe695d6c9c83 84 }
cromda 2:fe695d6c9c83 85
cromda 2:fe695d6c9c83 86
cromda 2:fe695d6c9c83 87 }
cromda 2:fe695d6c9c83 88
cromda 2:fe695d6c9c83 89 */ SAMPLE CODE ****************
cromda 2:fe695d6c9c83 90