#include "contorno.h" void ini_contorno (tContorno *contorno ) { int i; contorno->num_puntos_contorno=0; for (i=0;icontorno[i].latitud=0; contorno->contorno[i].longitud=0; } } void leer_contorno_teclado (tContorno *dibujo) { int i; printf("Escriu el nombre de punts:\n"); scanf("%d%*c",&dibujo->num_puntos_contorno); for(i=0;inum_puntos_contorno;i++){ dibujo->contorno[i]=leer_coordenada_teclado(); } } int buscar_coordenada_contorno (tContorno contorno, tCoordenada coordenada) { int i=0; while (!coordenadas_iguales(contorno.contorno[i],coordenada) && inum_puntos_contorno; if (contorno->num_puntos_contorno==MAX_PUNTOS_CONTORNO && buscar_coordenada_contorno (*contorno,coordenada)!= -1){ printf ("La llista de coordenades esta plena!!o la coordenada ja existeix\n"); return 0; }else{ contorno->contorno[i].latitud=coordenada.latitud; contorno->contorno[i].longitud=coordenada.longitud; contorno->num_puntos_contorno++; return i; } } int eliminar_coordenada_contorno (tContorno *contorno, tCoordenada coordenada) { int i; /*pos=buscar_coordenada_contorno (*contorno, coordenada);*/ if (contorno->num_puntos_contorno==0 || buscar_coordenada_contorno (*contorno, coordenada) == -1){ printf ("no s'ha pogut eliminar cap element perquè la llista està buida o la coordenada no hi es!!"); return 0; }else{ for (i=buscar_coordenada_contorno (*contorno, coordenada);inum_puntos_contorno;i++){ contorno->contorno[i].latitud = contorno->contorno[i+1].latitud; contorno->contorno[i].longitud = contorno->contorno[i+1].longitud; } contorno->num_puntos_contorno--; } return buscar_coordenada_contorno (*contorno, coordenada) ; } void dibujar_contorno_mapa (tContorno contorno) { int i; for (i=0;icontorno[i].latitud,&contorno->contorno[i].longitud); i++; } contorno->num_puntos_contorno = i; return i; } fclose (fpin); } void rotar_contorno ( tContorno *contorno, float angulo, tCoordenada centro_rotacion) { int i; for (i=0; inum_puntos_contorno;i++){ contorno->contorno[i] = rotar_coordenada (contorno->contorno[i], angulo, centro_rotacion); } dibujar_contorno_mapa (*contorno); } float calcular_perimetro (tContorno dibujo) { int i; float res,perim; perim = 0; res = 0; if(dibujo.num_puntos_contorno == 2){ res = calcular_distancia (dibujo.contorno[0],dibujo.contorno[1]); }else{ for (i=0;ilatitud,&coordenada->longitud); } return 1; fclose (fp); } tCoordenada rotar_coordenada (tCoordenada origen, float angulo, tCoordenada centro_rotacion) { tCoordenada coordenada; float alpha,dist,x,y; coordenada = ini_coordenada(); alpha=angulo_segmento_abcisas (centro_rotacion,origen ); dist=calcular_distancia (centro_rotacion,origen ); girar (angulo); y=dist*sin((alpha+angulo)/180*PI); x=dist*cos((alpha+angulo)/180*PI); coordenada.latitud=centro_rotacion.latitud+x; coordenada.longitud=centro_rotacion.longitud+y; return coordenada; } int coordenadas_iguales ( tCoordenada coordA,tCoordenada coordB) { return (coordA.latitud==coordB.latitud) && (coordA.longitud==coordB.longitud); } float angulo_segmento_abcisas ( tCoordenada cinicio , tCoordenada cfinal ) { double x,y,alpha; x= cfinal.latitud - cinicio.latitud; y= cfinal.longitud - cinicio.longitud; if ( x>=0 && y>=0 ) { alpha = atan(y/x)*180/PI; } else if ( x>=0 && y<0 ) { y=-y; alpha = 360 - atan(y/x)*180/PI; } else if ( x<0 && y>=0 ) { x=-x; alpha = 180- atan(y/x)*180/PI; } else if ( x<0 && y<0) { x=-x; y=-y; alpha = 180 + atan(y/x)*180/PI; } return (float) alpha; }