Trigonomectric constants Polar and spherical to rectangular coordinates transform
Dependents: DISCO-F746NG_Lidar ZAILLEL_Interface
Trigo.h@2:fe695d6c9c83, 2012-11-25 (annotated)
- 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?
User | Revision | Line number | New 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 |