00001 /************************************************************************************************** 00002 Software License Agreement (BSD License) 00003 00004 Copyright (c) 2011-2013, LAR toolkit developers - University of Aveiro - http://lars.mec.ua.pt 00005 All rights reserved. 00006 00007 Redistribution and use in source and binary forms, with or without modification, are permitted 00008 provided that the following conditions are met: 00009 00010 *Redistributions of source code must retain the above copyright notice, this list of 00011 conditions and the following disclaimer. 00012 *Redistributions in binary form must reproduce the above copyright notice, this list of 00013 conditions and the following disclaimer in the documentation and/or other materials provided 00014 with the distribution. 00015 *Neither the name of the University of Aveiro nor the names of its contributors may be used to 00016 endorse or promote products derived from this software without specific prior written permission. 00017 00018 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 00019 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 00020 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 00021 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00022 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00023 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 00024 IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 00025 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 ***************************************************************************************************/ 00027 /***************************************************/ 00028 /* Last Revised: 00029 $Id: calcul.h 8465 2009-12-16 00:44:13Z gbiggs $ 00030 */ 00031 /***************************************************/ 00032 /* 00033 * This program is free software; you can redistribute it and/or modify 00034 * it under the terms of the GNU General Public License as published by 00035 * the Free Software Foundation; either version 2 of the License, or 00036 * (at your option) any later version. 00037 * 00038 * This program is distributed in the hope that it will be useful, 00039 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00040 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00041 * GNU General Public License for more details. 00042 * 00043 * You should have received a copy of the GNU General Public License 00044 * along with this program; if not, write to the Free Software 00045 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00046 * 00047 */ 00048 00054 #ifndef Calcul 00055 #define Calcul 00056 00057 #include <stdio.h> 00058 #include <math.h> 00059 #include "TData.h" 00060 00061 #ifdef __cplusplus 00062 extern "C" { 00063 #endif 00064 00065 /* 00066 Este fichero tiene operaciones de transformacion de sistemas de referencia, 00067 transformaciones de puntos entre sistemas, de paso de coordenadadas polares, 00068 a cartesianas y de corte de segmentos 00069 00070 */ 00071 00072 /* --------------------------------------------------------------------------------------- */ 00073 /* TRANSFORMACIONES DE PUNTO DE UN SISTEMA DE REFERENCIA A OTRO */ 00074 /* --------------------------------------------------------------------------------------- */ 00075 00076 /* --------------------------------------------------------------------------------------- */ 00077 /* transfor_directa_p */ 00078 /* .... Hace la transformacion directa de un punto a un sistema a otro */ 00079 /* .... In: (x,y) las coordenadas del punto, sistema es el sistema de referencia */ 00080 /* .... Out: en sol se devuelve las coordenadas del punto en el nuevo sistema */ 00081 00082 void transfor_directa_p ( float x, float y, Tsc *sistema, Tpf *sol ); 00083 00084 /* --------------------------------------------------------------------------------------- */ 00085 /* transfor_directa_p */ 00086 /* .... Hace la transformacion directa de un punto a un sistema a otro */ 00087 /* .... La diferencia es que aqui el punto de entrada es el (0,0) (optimiza la anterior) */ 00088 /* .... In: (x,y) las coordenadas del punto, sistema es el sistema de referencia */ 00089 /* .... Out: en sol se devuelve las coordenadas del punto en el nuevo sistema */ 00090 00091 void transfor_directa_pt0(float x, float y, 00092 Tsc *sistema, Tpf *sol); 00093 00094 /* --------------------------------------------------------------------------------------- */ 00095 /* transfor_inversa_p */ 00096 /* .... Hace la transformacion inversa de un punto a un sistema a otro */ 00097 /* .... In: (x,y) las coordenadas del punto, sistema es el sistema de referencia */ 00098 /* .... Out: en sol se devuelve las coordenadas del punto en el nuevo sistema */ 00099 00100 void transfor_inversa_p ( float x, float y, Tsc *sistema, Tpf *sol ); 00101 00102 /* --------------------------------------------------------------------------------------- */ 00103 /* TRANSFORMACIONES DE COMPOSICION E INVERSION DE SISTEMAS DE REFERENCIA */ 00104 /* --------------------------------------------------------------------------------------- */ 00105 00106 /* --------------------------------------------------------------------------------------- */ 00107 /* composicion_sis */ 00108 /* .... Realiza la composicion de sistemas de referencia en otro sistema */ 00109 /* .... In: compone sis1 y sis2 */ 00110 /* .... Out: la salida sisOut es el resultado de la composicion de los sistemas */ 00111 /* .... Nota: resulta muy importante el orden de las entradas en la composicion */ 00112 00113 void composicion_sis(Tsc *sis1,Tsc *sis2,Tsc *sisOut); 00114 00115 /* --------------------------------------------------------------------------------------- */ 00116 /* inversion_sis */ 00117 /* .... Realiza la inversion de un sistema de referencia */ 00118 /* .... In: sisIn es el sistema a invertir */ 00119 /* .... Out: sisOut es el sistema invertido */ 00120 00121 void inversion_sis(Tsc *sisIn, Tsc *sisOut); 00122 00123 /* --------------------------------------------------------------------------------------- */ 00124 /* TRANSFORMACIONES DE PUNTO DE UN SISTEMA DE REFERENCIA A OTRO */ 00125 /* --------------------------------------------------------------------------------------- */ 00126 00127 /* --------------------------------------------------------------------------------------- */ 00128 /* car2pol */ 00129 /* .... Transforma un punto de coordenadas cartesianas a polares */ 00130 /* .... In: el punto en coordenadas cartesianas a transformar */ 00131 /* .... Out: el punto salida en coordenadas polares */ 00132 00133 void car2pol(Tpf *in, Tpfp *out); 00134 00135 /* --------------------------------------------------------------------------------------- */ 00136 /* pol2car */ 00137 /* .... Transforma un punto de coordenadas polares a cartesianas */ 00138 /* .... In: el punto entrada en coordenadas polares a transformar */ 00139 /* .... Out: el punto en coordenadas cartesianas transformado */ 00140 00141 void pol2car(Tpfp *in, Tpf *out); 00142 00143 /* --------------------------------------------------------------------------------------- */ 00144 /* TRANSFORMACIONES DE PUNTO DE UN SISTEMA DE REFERENCIA A OTRO */ 00145 /* --------------------------------------------------------------------------------------- */ 00146 00147 /* --------------------------------------------------------------------------------------- */ 00148 /* corte_segmentos */ 00149 /* .... Calcula el punto de corte entre dos segmentos */ 00150 /* .... In: las coordenadas de los puntos extremos (x1,y1)-(x2,y2) y (x3,y3)-(x4,y4) */ 00151 /* .... Out: sol son las coordenadas del punto de corte. return --> 1 si hay corte. -->0 no */ 00152 00153 int corte_segmentos ( float x1, float y1, float x2, float y2, 00154 float x3, float y3, float x4, float y4, 00155 Tpf *sol ); 00156 00157 00158 /* Normaliza el angulo entre [-PI, PI] */ 00159 float NormalizarPI(float ang); 00160 00161 #ifdef __cplusplus 00162 } 00163 #endif 00164 00165 #endif