Trigonomectric constants Polar and spherical to rectangular coordinates transform

Dependents:   DISCO-F746NG_Lidar ZAILLEL_Interface

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?

UserRevisionLine numberNew 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