Download document (10.35 MB) - Escuela Superior de Informática ...
Download document (10.35 MB) - Escuela Superior de Informática ... Download document (10.35 MB) - Escuela Superior de Informática ...
168 Capítulo D. Código fuente7 * suavizado --> Factor de suavizado a utilizar8 * Salidas: Ninguna.9 **********************************************************************/10 void suavizar (int desde, int hasta, int canal, int suavizado)11 {12 int nerrores_intervalo=0;13 double vaux [MAX_PTOS];14 int i, j, desde_prop, hasta_prop;15 TPunto3D *Punto3D;16 GSList *Nodo;1718 /* Veamos si el intervalo tiene algun error */19 for (i=0; idata;22 switch (j %3) {23 case 0 : { if (Punto3D->x > 999998) nerrores_intervalo++; break; }24 case 1 : { if (Punto3D->y > 999998) nerrores_intervalo++; break; }25 case 2 : { if (Punto3D->z > 999998) nerrores_intervalo++; break; }26 };27 }2829 if (nerrores_intervalo != 0)30 mostrar_popup (g_strdup_printf ("El intervalo seleccionado no puede31 tener\n errores para proceder al suavizado.\n32 El intervalo %d - %d del canal [ %s] tiene %d errores.",33 desde, hasta, modelo3D[canal].nombre->str,34 nerrores_intervalo) , GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE);35 else { /* El intervalo elegido no tiene errores */36 /* Creamos el vector de puntos... */37 for (j=canal; j MAX_PTOS) hasta_prop += (MAX_PTOS -1);41 else hasta_prop = hasta;4243 /* Introducimos errores cada tantos puntos como indique el */44 /* factor de suavizado. Luego pasaremos a interpolar... */4546 for (i=0; idata;49 switch (j %3) {50 case 0 : { if ((i %suavizado==0) || (i==hasta_prop-desde_prop))51 vaux [i] = Punto3D->x; else vaux [i] = 999999;break; }52 case 1 : { if ((i %suavizado==0) || (i==hasta_prop-desde_prop))53 vaux [i] = Punto3D->y; else vaux [i] = 999999;break; }54 case 2 : { if ((i %suavizado==0) || (i==hasta_prop-desde_prop))55 vaux [i] = Punto3D->z; else vaux [i] = 999999;break; }56 };57 }5859 interpola (hasta_prop-desde_prop+1, vaux);6061 /* Guardamos el resultado obtenido en la estructura de datos */6263 for (i=0; i
D.2. Código fuente de los módulos más relevantes. 16964 Nodo = (g_slist_nth ( modelo3D[canal].lista, desde_prop+i));65 Punto3D = Nodo->data;66 switch (j %3) {67 case 0 : { Punto3D->x = vaux [i]; break; }68 case 1 : { Punto3D->y = vaux [i]; break; }69 case 2 : { Punto3D->z = vaux [i]; break; }70 };71 }72 desde_prop = hasta_prop+1;73 } /* Fin del while */74 } /* Fin del for con el que recorremos XYZ del canal */75 } /* Else (si no hubo error) */76 }7778 /*******************************************************************79 * Funcion: interpola80 * Descripcion: Dado el vector con los valores de y originales (yo),81 * devolveremos el mismo vector, pero sin errores.82 * El algoritmo de interpolacion esta basado en Splines83 * Cubicas Naturales.84 * Entradas: num_ptos --> Numero de puntos85 * yo --> Vector con los valores en el eje Y.86 * Salidas: Ninguna.87 ********************************************************************/88 void interpola (int num_ptos, double yo[])89 {90 int i, j, k, l, m;91 double ax[MAX_PTOS], bx[MAX_PTOS], cx[MAX_PTOS], dx[MAX_PTOS];92 double ay[MAX_PTOS], by[MAX_PTOS], cy[MAX_PTOS], dy[MAX_PTOS];93 double der[MAX_PTOS], gam[MAX_PTOS], ome[MAX_PTOS];94 double x[MAX_PTOS], y[MAX_PTOS];95 double t, dt;96 int ierror, ferror; /* Inicio y fin de cada segmento que tiene error */9798 /* Creamos los vectores x, e y sin insertar en ellos los errores */99 dt = 1./(double) InfoFichero.frames_seg;100101 if (arregla_extremos (num_ptos, yo))102 mostrar_popup ("Demasiados Errores.\n No se puede interpolar103 automaticamente.",104 GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE);105 for (i=0, j=0, t=0; i
- Page 142 and 143: 118 Capítulo 5. Resultados5.2. Res
- Page 144 and 145: 120 Capítulo 5. Resultados• Boca
- Page 146 and 147: 122 Capítulo 5. ResultadosVídeos
- Page 148 and 149: 124 Capítulo 6. Conclusiones y Pro
- Page 150 and 151: 126 Capítulo 6. Conclusiones y Pro
- Page 152 and 153: 128 Capítulo 6. Conclusiones y Pro
- Page 154 and 155: 130 Capítulo 6. Conclusiones y Pro
- Page 156 and 157: 132 Capítulo 6. Conclusiones y Pro
- Page 158 and 159: 134 Capítulo A. DiagramasUSERcallb
- Page 160 and 161: 136 Capítulo B. Manual de usuarioF
- Page 162 and 163: 138 Capítulo B. Manual de usuarioM
- Page 164 and 165: 140 Capítulo B. Manual de usuarioL
- Page 166 and 167: 142 Capítulo B. Manual de usuarioP
- Page 168 and 169: 144 Capítulo C. Manual de Instalac
- Page 170 and 171: 146 Capítulo D. Código fuente/src
- Page 172 and 173: 148 Capítulo D. Código fuente77 i
- Page 174 and 175: 150 Capítulo D. Código fuente113
- Page 176 and 177: 152 Capítulo D. Código fuente233
- Page 178 and 179: 154 Capítulo D. Código fuente3533
- Page 180 and 181: 156 Capítulo D. Código fuente473
- Page 182 and 183: 158 Capítulo D. Código fuente593
- Page 184 and 185: 160 Capítulo D. Código fuente713
- Page 186 and 187: 162 Capítulo D. Código fuente833
- Page 188 and 189: 164 Capítulo D. Código fuente43 /
- Page 190 and 191: 166 Capítulo D. Código fuente163
- Page 194 and 195: 170 Capítulo D. Código fuente124
- Page 196 and 197: 172 BIBLIOGRAFÍA[17] OpenGL Archit
D.2. Código fuente <strong>de</strong> los módulos más relevantes. 16964 Nodo = (g_slist_nth ( mo<strong>de</strong>lo3D[canal].lista, <strong>de</strong>s<strong>de</strong>_prop+i));65 Punto3D = Nodo->data;66 switch (j %3) {67 case 0 : { Punto3D->x = vaux [i]; break; }68 case 1 : { Punto3D->y = vaux [i]; break; }69 case 2 : { Punto3D->z = vaux [i]; break; }70 };71 }72 <strong>de</strong>s<strong>de</strong>_prop = hasta_prop+1;73 } /* Fin <strong>de</strong>l while */74 } /* Fin <strong>de</strong>l for con el que recorremos XYZ <strong>de</strong>l canal */75 } /* Else (si no hubo error) */76 }7778 /*******************************************************************79 * Funcion: interpola80 * Descripcion: Dado el vector con los valores <strong>de</strong> y originales (yo),81 * <strong>de</strong>volveremos el mismo vector, pero sin errores.82 * El algoritmo <strong>de</strong> interpolacion esta basado en Splines83 * Cubicas Naturales.84 * Entradas: num_ptos --> Numero <strong>de</strong> puntos85 * yo --> Vector con los valores en el eje Y.86 * Salidas: Ninguna.87 ********************************************************************/88 void interpola (int num_ptos, double yo[])89 {90 int i, j, k, l, m;91 double ax[MAX_PTOS], bx[MAX_PTOS], cx[MAX_PTOS], dx[MAX_PTOS];92 double ay[MAX_PTOS], by[MAX_PTOS], cy[MAX_PTOS], dy[MAX_PTOS];93 double <strong>de</strong>r[MAX_PTOS], gam[MAX_PTOS], ome[MAX_PTOS];94 double x[MAX_PTOS], y[MAX_PTOS];95 double t, dt;96 int ierror, ferror; /* Inicio y fin <strong>de</strong> cada segmento que tiene error */9798 /* Creamos los vectores x, e y sin insertar en ellos los errores */99 dt = 1./(double) InfoFichero.frames_seg;100101 if (arregla_extremos (num_ptos, yo))102 mostrar_popup ("Demasiados Errores.\n No se pue<strong>de</strong> interpolar103 automaticamente.",104 GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE);105 for (i=0, j=0, t=0; i