Trigonomectric constants Polar and spherical to rectangular coordinates transform
Dependents: DISCO-F746NG_Lidar ZAILLEL_Interface
Trigo.h@5:b07cac89c306, 2012-12-08 (annotated)
- Committer:
- cromda
- Date:
- Sat Dec 08 21:54:57 2012 +0000
- Revision:
- 5:b07cac89c306
- Parent:
- 4:a6b0fd2c4f85
- Child:
- 6:690d6de2df16
Add dm2dec function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cromda | 4:a6b0fd2c4f85 | 1 | /* mbed Trigonometric constants and utilities |
cromda | 4:a6b0fd2c4f85 | 2 | * remi cormier 2012 |
cromda | 4:a6b0fd2c4f85 | 3 | */ |
cromda | 4:a6b0fd2c4f85 | 4 | |
cromda | 0:2f533ad7c611 | 5 | #ifndef MBED_TRIGO_H |
cromda | 0:2f533ad7c611 | 6 | #define MBED_TRIGO_H |
cromda | 0:2f533ad7c611 | 7 | |
cromda | 4:a6b0fd2c4f85 | 8 | /** Example code |
cromda | 4:a6b0fd2c4f85 | 9 | * @code |
cromda | 5:b07cac89c306 | 10 | #include "mbed.h" |
cromda | 5:b07cac89c306 | 11 | #include "Trigo.h" |
cromda | 5:b07cac89c306 | 12 | |
cromda | 5:b07cac89c306 | 13 | Serial pc(USBTX, USBRX); |
cromda | 5:b07cac89c306 | 14 | Timer chrono; |
cromda | 5:b07cac89c306 | 15 | |
cromda | 5:b07cac89c306 | 16 | const float Dmax = 1.0; |
cromda | 5:b07cac89c306 | 17 | float N = 1; |
cromda | 5:b07cac89c306 | 18 | const float pas=Dmax/N; |
cromda | 5:b07cac89c306 | 19 | float X; |
cromda | 5:b07cac89c306 | 20 | float Y; |
cromda | 5:b07cac89c306 | 21 | float Z; |
cromda | 5:b07cac89c306 | 22 | float R; |
cromda | 5:b07cac89c306 | 23 | float A; |
cromda | 5:b07cac89c306 | 24 | float B; |
cromda | 5:b07cac89c306 | 25 | |
cromda | 5:b07cac89c306 | 26 | int main() { |
cromda | 5:b07cac89c306 | 27 | |
cromda | 5:b07cac89c306 | 28 | pc.baud(115200); |
cromda | 5:b07cac89c306 | 29 | |
cromda | 5:b07cac89c306 | 30 | // print pi do PC |
cromda | 5:b07cac89c306 | 31 | pc.printf("pi = %.9f\n\r",Pi); |
cromda | 4:a6b0fd2c4f85 | 32 | |
cromda | 5:b07cac89c306 | 33 | // Recpol dand PolRec test |
cromda | 5:b07cac89c306 | 34 | pc.printf("RecPol et PolRec\n\r"); |
cromda | 5:b07cac89c306 | 35 | for(float i=-N; i<=N; i+=1) |
cromda | 5:b07cac89c306 | 36 | { |
cromda | 5:b07cac89c306 | 37 | for (float j=-N; j<=N;j+=1) |
cromda | 5:b07cac89c306 | 38 | {X=i*pas; |
cromda | 5:b07cac89c306 | 39 | Y=j*pas; |
cromda | 5:b07cac89c306 | 40 | RecPol(X,Y,&R,&A); |
cromda | 5:b07cac89c306 | 41 | pc.printf("X : %+.9f Y : %+.9f R : %+.9f A : %+9.4f\n\r",X,Y,R,A/degre); |
cromda | 5:b07cac89c306 | 42 | PolRec(R,A,&X,&Y); |
cromda | 5:b07cac89c306 | 43 | pc.printf("X : %+.9f Y : %+.9f R : %+.9f A : %+9.4f\n\r",X,Y,R,A/degre); |
cromda | 5:b07cac89c306 | 44 | }} |
cromda | 5:b07cac89c306 | 45 | pc.printf("\n\r"); |
cromda | 5:b07cac89c306 | 46 | |
cromda | 5:b07cac89c306 | 47 | // RecSph and SphRec test |
cromda | 5:b07cac89c306 | 48 | pc.printf("RecSph et SphRec\n\r"); |
cromda | 5:b07cac89c306 | 49 | |
cromda | 5:b07cac89c306 | 50 | for (float i=-N;i<=N;i+=1) |
cromda | 5:b07cac89c306 | 51 | {for (float j=-N;j<=N;j+=1) |
cromda | 5:b07cac89c306 | 52 | {for (float k=-N;k<=N;k+=1) |
cromda | 5:b07cac89c306 | 53 | {X=i*pas; |
cromda | 5:b07cac89c306 | 54 | Y=j*pas; |
cromda | 5:b07cac89c306 | 55 | Z=k*pas; |
cromda | 5:b07cac89c306 | 56 | RecSph(X,Y,Z,&R,&A,&B); |
cromda | 5:b07cac89c306 | 57 | 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 | 5:b07cac89c306 | 58 | SphRec(R,A,B,&X,&Y,&Z); |
cromda | 5:b07cac89c306 | 59 | 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 | 5:b07cac89c306 | 60 | } |
cromda | 5:b07cac89c306 | 61 | } |
cromda | 5:b07cac89c306 | 62 | } |
cromda | 5:b07cac89c306 | 63 | |
cromda | 5:b07cac89c306 | 64 | float dm=-4852.8359; |
cromda | 5:b07cac89c306 | 65 | |
cromda | 5:b07cac89c306 | 66 | pc.printf("dm2dec(%f) = %f",dm,dm2dec(dm)); |
cromda | 5:b07cac89c306 | 67 | |
cromda | 5:b07cac89c306 | 68 | } |
cromda | 5:b07cac89c306 | 69 | |
cromda | 5:b07cac89c306 | 70 | |
cromda | 5:b07cac89c306 | 71 | |
cromda | 5:b07cac89c306 | 72 | |
cromda | 4:a6b0fd2c4f85 | 73 | * @endcode |
cromda | 4:a6b0fd2c4f85 | 74 | */ |
cromda | 1:eb028056d162 | 75 | |
cromda | 0:2f533ad7c611 | 76 | |
cromda | 4:a6b0fd2c4f85 | 77 | /** Pi |
cromda | 4:a6b0fd2c4f85 | 78 | * |
cromda | 4:a6b0fd2c4f85 | 79 | * @param pi : pi |
cromda | 4:a6b0fd2c4f85 | 80 | */ |
cromda | 4:a6b0fd2c4f85 | 81 | const float Pi = 3.141592653590; |
cromda | 4:a6b0fd2c4f85 | 82 | |
cromda | 4:a6b0fd2c4f85 | 83 | /** pi/2 |
cromda | 4:a6b0fd2c4f85 | 84 | * |
cromda | 4:a6b0fd2c4f85 | 85 | * @param halfPi : pi/2 |
cromda | 4:a6b0fd2c4f85 | 86 | */ |
cromda | 4:a6b0fd2c4f85 | 87 | const float halfPi = Pi/2.0; |
cromda | 0:2f533ad7c611 | 88 | |
cromda | 4:a6b0fd2c4f85 | 89 | /** 2 pi |
cromda | 4:a6b0fd2c4f85 | 90 | * |
cromda | 4:a6b0fd2c4f85 | 91 | * @param twoPi : 2*pi |
cromda | 4:a6b0fd2c4f85 | 92 | */ |
cromda | 4:a6b0fd2c4f85 | 93 | const float twoPi = 2.0*Pi; |
cromda | 4:a6b0fd2c4f85 | 94 | |
cromda | 4:a6b0fd2c4f85 | 95 | /** degre |
cromda | 4:a6b0fd2c4f85 | 96 | * |
cromda | 4:a6b0fd2c4f85 | 97 | * @param degre = pi/180 |
cromda | 4:a6b0fd2c4f85 | 98 | */ |
cromda | 4:a6b0fd2c4f85 | 99 | const float degre = Pi/180.0; |
cromda | 4:a6b0fd2c4f85 | 100 | |
cromda | 4:a6b0fd2c4f85 | 101 | /** rectangular to polar coordinates (r : radius, a : angle) transform |
cromda | 4:a6b0fd2c4f85 | 102 | * |
cromda | 4:a6b0fd2c4f85 | 103 | * @param x : x coordinate |
cromda | 4:a6b0fd2c4f85 | 104 | * @param y : y coordinate |
cromda | 4:a6b0fd2c4f85 | 105 | * @param r : radius |
cromda | 4:a6b0fd2c4f85 | 106 | * @param a : angle (radian, counterclockwise) |
cromda | 4:a6b0fd2c4f85 | 107 | */ |
cromda | 0:2f533ad7c611 | 108 | void RecPol(float x, float y, float *r, float *a); |
cromda | 0:2f533ad7c611 | 109 | |
cromda | 4:a6b0fd2c4f85 | 110 | /** polar to rectangular coordinates transform |
cromda | 4:a6b0fd2c4f85 | 111 | * |
cromda | 4:a6b0fd2c4f85 | 112 | * @param r : radius |
cromda | 4:a6b0fd2c4f85 | 113 | * @param a : angle (radian, counterclockwise) |
cromda | 4:a6b0fd2c4f85 | 114 | * @param x : x coordinate |
cromda | 4:a6b0fd2c4f85 | 115 | * @param y : y coordinate |
cromda | 4:a6b0fd2c4f85 | 116 | */ |
cromda | 0:2f533ad7c611 | 117 | void PolRec(float r, float a, float *x, float *y); |
cromda | 0:2f533ad7c611 | 118 | |
cromda | 4:a6b0fd2c4f85 | 119 | /** Rectangular to spherical coordinates transform |
cromda | 4:a6b0fd2c4f85 | 120 | * |
cromda | 4:a6b0fd2c4f85 | 121 | * @param x : x coordinate |
cromda | 4:a6b0fd2c4f85 | 122 | * @param y : y coordinate |
cromda | 4:a6b0fd2c4f85 | 123 | * @param z : z coordinate |
cromda | 4:a6b0fd2c4f85 | 124 | * @param r : radius |
cromda | 4:a6b0fd2c4f85 | 125 | * @param a : angle in xy plane (longitude) ; radian counter clockwise |
cromda | 4:a6b0fd2c4f85 | 126 | * @param b : angle above xy plane ; radian |
cromda | 4:a6b0fd2c4f85 | 127 | */ |
cromda | 0:2f533ad7c611 | 128 | void RecSph(float x, float y, float z, float *r, float *a, float *b); |
cromda | 0:2f533ad7c611 | 129 | |
cromda | 4:a6b0fd2c4f85 | 130 | /** Spherical to rectangular coordinates transform |
cromda | 4:a6b0fd2c4f85 | 131 | * |
cromda | 4:a6b0fd2c4f85 | 132 | * @param r : radius |
cromda | 4:a6b0fd2c4f85 | 133 | * @param a : angle in xy plane (longitude) ; radian counter clockwise |
cromda | 4:a6b0fd2c4f85 | 134 | * @param b : angle above xy plane ; radian |
cromda | 4:a6b0fd2c4f85 | 135 | * @param x : x coordinate |
cromda | 4:a6b0fd2c4f85 | 136 | * @param y : y coordinate |
cromda | 4:a6b0fd2c4f85 | 137 | * @param z : z coordinate |
cromda | 4:a6b0fd2c4f85 | 138 | */ |
cromda | 4:a6b0fd2c4f85 | 139 | |
cromda | 4:a6b0fd2c4f85 | 140 | |
cromda | 0:2f533ad7c611 | 141 | void SphRec(float r, float a, float b, float *x, float *y, float *z); |
cromda | 0:2f533ad7c611 | 142 | |
cromda | 5:b07cac89c306 | 143 | /** sexagesimal to decimal |
cromda | 5:b07cac89c306 | 144 | * |
cromda | 5:b07cac89c306 | 145 | * @param dm : ddmm.mmmm |
cromda | 5:b07cac89c306 | 146 | * @return d.ddddd |
cromda | 5:b07cac89c306 | 147 | */ |
cromda | 5:b07cac89c306 | 148 | |
cromda | 5:b07cac89c306 | 149 | float dm2dec(float dm); |
cromda | 5:b07cac89c306 | 150 | |
cromda | 2:fe695d6c9c83 | 151 | #endif |
cromda | 2:fe695d6c9c83 | 152 |