00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef geometria_h
00012 #define geometria_h
00013
00014 #include <math.h>
00015 #include "nd.h"
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef PI
00024 #undef PI
00025 #endif
00026
00027 #define PI 3.1415926535F
00028 #ifndef M_PI
00029 #define M_PI PI
00030 #endif
00031
00032
00033
00034 #define CUADRADO(x) (float)((x)*(x))
00035 #define RAIZ(x) (float)sqrt(x)
00036
00037 #define ARCOTANGENTE(x,y) (float)atan2(y,x)
00038 #define ARCOCOSENO(x,r) (float)acos((x)/(r))
00039 #define ARCOSENO(y,r) (float)asin((y)/(r))
00040
00041 #define MINIMO(a,b) ( (a)<=(b) ? (a) : (b) )
00042 #define MAXIMO(a,b) ( (a)>=(b) ? (a) : (b) )
00043
00044
00045
00046
00047
00048 extern void AplicarCotas(float *n,float i,float s);
00049
00050
00051
00052
00053
00054
00055
00056 #define DISTANCIA_CUADRADO2(p,q) (((p).x-(q).x)*((p).x-(q).x)+((p).y-(q).y)*((p).y-(q).y))
00057
00058
00059
00060 typedef struct {
00061 float r;
00062 float a;
00063 } TCoordenadasPolares;
00064
00065
00066
00067
00068
00069 extern void ConstruirCoordenadasCP(TCoordenadas *p,TCoordenadasPolares q);
00070 extern void ConstruirCoordenadasCxy(TCoordenadas *p,float x,float y);
00071 extern void ConstruirCoordenadasCra(TCoordenadas *p,float r,float a);
00072
00073 extern void ConstruirCoordenadasPC(TCoordenadasPolares *p,TCoordenadas q);
00074 extern void ConstruirCoordenadasPxy(TCoordenadasPolares *p,float x,float y);
00075 extern void ConstruirCoordenadasPra(TCoordenadasPolares *p,float r,float a);
00076
00077
00078 extern void ConstruirCoordenadasPcC(TCoordenadasPolares *p,TCoordenadas q);
00079
00080
00081
00082
00083
00084 extern void SumarCoordenadasCxy(TCoordenadas *p,float x,float y);
00085 extern void SumarCoordenadasCxyC(TCoordenadas p,float x,float y,TCoordenadas *q);
00086 extern void SumarCoordenadasCra(TCoordenadas *p,float r,float a);
00087 extern void SumarCoordenadasCraC(TCoordenadas p,float r,float a,TCoordenadas *q);
00088
00089
00090
00091
00092
00093
00094
00095 extern void TransformacionDirecta(TSR *SR,TCoordenadas *p);
00096
00097 #define TRANSFORMACION01(SR1,p) TransformacionDirecta(SR1,p);
00098 #define TRANSFORMACION12(SR2,p) TransformacionDirecta(SR2,p);
00099 #define TRANSFORMACION23(SR3,p) TransformacionDirecta(SR3,p);
00100
00101 #define TRANSFORMACION02(SR1,SR2,p) \
00102 { \
00103 TRANSFORMACION01(SR1,p) \
00104 TRANSFORMACION12(SR2,p) \
00105 }
00106
00107
00108
00109 extern void TransformacionInversa(TSR *SR,TCoordenadas *p);
00110
00111 #define TRANSFORMACION32(SR3,p) TransformacionInversa(SR3,p);
00112 #define TRANSFORMACION21(SR2,p) TransformacionInversa(SR2,p);
00113 #define TRANSFORMACION10(SR1,p) TransformacionInversa(SR1,p);
00114
00115 #define TRANSFORMACION20(SR2,SR1,p) \
00116 { \
00117 TRANSFORMACION21(SR2,p) \
00118 TRANSFORMACION10(SR1,p) \
00119 }
00120
00121
00122
00123 #define TRANSFORMACION101(SR1a,SR1b,p) \
00124 { \
00125 TRANSFORMACION10(SR1a,p) \
00126 TRANSFORMACION01(SR1b,p) \
00127 }
00128
00129
00130
00131
00132
00133 extern float AnguloNormalizado(float angulo);
00134
00135 extern int AnguloPerteneceIntervaloOrientadoCerrado(float angulo,float limite1,float limite2);
00136
00137
00138
00139 extern float BisectrizAnguloOrientado(float limite1,float limite2);
00140
00141
00142 extern float BisectrizAnguloNoOrientado(float limite1,float limite2);
00143
00144
00145 extern float AmplitudAnguloOrientado(float limite1,float limite2);
00146
00147
00148 extern float AmplitudAnguloNoOrientado(float limite1,float limite2);
00149
00150
00151
00152
00153
00154
00155
00156 void MinimaDistanciaCuadradoCorte(TCoordenadasPolares pp1,TCoordenadasPolares pp2,float angulo,float *distancia);
00157
00158
00159
00160
00161
00162
00163 #endif //geometria_h