00001 /***************************************************/ 00002 /* Last Revised: 00003 $Id: calcul.h 4129 2007-08-21 23:16:24Z gerkey $ 00004 */ 00005 /***************************************************/ 00006 00007 #ifndef Calcul 00008 #define Calcul 00009 00010 #include <stdio.h> 00011 #include <math.h> 00012 #include "TData.h" 00013 00014 #ifdef __cplusplus 00015 extern "C" { 00016 #endif 00017 00018 /* 00019 Este fichero tiene operaciones de transformacion de sistemas de referencia, 00020 transformaciones de puntos entre sistemas, de paso de coordenadadas polares, 00021 a cartesianas y de corte de segmentos 00022 00023 */ 00024 00025 /* --------------------------------------------------------------------------------------- */ 00026 /* TRANSFORMACIONES DE PUNTO DE UN SISTEMA DE REFERENCIA A OTRO */ 00027 /* --------------------------------------------------------------------------------------- */ 00028 00029 /* --------------------------------------------------------------------------------------- */ 00030 /* transfor_directa_p */ 00031 /* .... Hace la transformacion directa de un punto a un sistema a otro */ 00032 /* .... In: (x,y) las coordenadas del punto, sistema es el sistema de referencia */ 00033 /* .... Out: en sol se devuelve las coordenadas del punto en el nuevo sistema */ 00034 00035 void transfor_directa_p ( float x, float y, Tsc *sistema, Tpf *sol ); 00036 00037 /* --------------------------------------------------------------------------------------- */ 00038 /* transfor_directa_p */ 00039 /* .... Hace la transformacion directa de un punto a un sistema a otro */ 00040 /* .... La diferencia es que aqui el punto de entrada es el (0,0) (optimiza la anterior) */ 00041 /* .... In: (x,y) las coordenadas del punto, sistema es el sistema de referencia */ 00042 /* .... Out: en sol se devuelve las coordenadas del punto en el nuevo sistema */ 00043 00044 void transfor_directa_pt0(float x, float y, 00045 Tsc *sistema, Tpf *sol); 00046 00047 /* --------------------------------------------------------------------------------------- */ 00048 /* transfor_inversa_p */ 00049 /* .... Hace la transformacion inversa de un punto a un sistema a otro */ 00050 /* .... In: (x,y) las coordenadas del punto, sistema es el sistema de referencia */ 00051 /* .... Out: en sol se devuelve las coordenadas del punto en el nuevo sistema */ 00052 00053 void transfor_inversa_p ( float x, float y, Tsc *sistema, Tpf *sol ); 00054 00055 /* --------------------------------------------------------------------------------------- */ 00056 /* TRANSFORMACIONES DE COMPOSICION E INVERSION DE SISTEMAS DE REFERENCIA */ 00057 /* --------------------------------------------------------------------------------------- */ 00058 00059 /* --------------------------------------------------------------------------------------- */ 00060 /* composicion_sis */ 00061 /* .... Realiza la composicion de sistemas de referencia en otro sistema */ 00062 /* .... In: compone sis1 y sis2 */ 00063 /* .... Out: la salida sisOut es el resultado de la composicion de los sistemas */ 00064 /* .... Nota: resulta muy importante el orden de las entradas en la composicion */ 00065 00066 void composicion_sis(Tsc *sis1,Tsc *sis2,Tsc *sisOut); 00067 00068 /* --------------------------------------------------------------------------------------- */ 00069 /* inversion_sis */ 00070 /* .... Realiza la inversion de un sistema de referencia */ 00071 /* .... In: sisIn es el sistema a invertir */ 00072 /* .... Out: sisOut es el sistema invertido */ 00073 00074 void inversion_sis(Tsc *sisIn, Tsc *sisOut); 00075 00076 /* --------------------------------------------------------------------------------------- */ 00077 /* TRANSFORMACIONES DE PUNTO DE UN SISTEMA DE REFERENCIA A OTRO */ 00078 /* --------------------------------------------------------------------------------------- */ 00079 00080 /* --------------------------------------------------------------------------------------- */ 00081 /* car2pol */ 00082 /* .... Transforma un punto de coordenadas cartesianas a polares */ 00083 /* .... In: el punto en coordenadas cartesianas a transformar */ 00084 /* .... Out: el punto salida en coordenadas polares */ 00085 00086 void car2pol(Tpf *in, Tpfp *out); 00087 00088 /* --------------------------------------------------------------------------------------- */ 00089 /* pol2car */ 00090 /* .... Transforma un punto de coordenadas polares a cartesianas */ 00091 /* .... In: el punto entrada en coordenadas polares a transformar */ 00092 /* .... Out: el punto en coordenadas cartesianas transformado */ 00093 00094 void pol2car(Tpfp *in, Tpf *out); 00095 00096 /* --------------------------------------------------------------------------------------- */ 00097 /* TRANSFORMACIONES DE PUNTO DE UN SISTEMA DE REFERENCIA A OTRO */ 00098 /* --------------------------------------------------------------------------------------- */ 00099 00100 /* --------------------------------------------------------------------------------------- */ 00101 /* corte_segmentos */ 00102 /* .... Calcula el punto de corte entre dos segmentos */ 00103 /* .... In: las coordenadas de los puntos extremos (x1,y1)-(x2,y2) y (x3,y3)-(x4,y4) */ 00104 /* .... Out: sol son las coordenadas del punto de corte. return --> 1 si hay corte. -->0 no */ 00105 00106 int corte_segmentos ( float x1, float y1, float x2, float y2, 00107 float x3, float y3, float x4, float y4, 00108 Tpf *sol ); 00109 00110 00111 /* Normaliza el angulo entre [-PI, PI] */ 00112 float NormalizarPI(float ang); 00113 00114 #ifdef __cplusplus 00115 } 00116 #endif 00117 00118 #endif