#include "tortuga.h" #include "coordenada.h" /* Crea e inicializa una estructura de tipo tCoordenada con las coordenadas (0,0) */ tCoordenada ini_coordenada () { tCoordenada aux; aux.latitud= 0; aux.longitud= 0; return aux; } /* Lee desde teclado los campos latitud y longitud de la estructura coordenada y retorna una estructura de tipo tCoordenada cargada con éstos valores */ tCoordenada leer_coordenada_teclado () { tCoordenada coord; coord = ini_coordenada(); printf("\n Latitud? "); scanf("%f%*c", &coord.latitud); printf("\n Longitud? "); scanf("%f%*c", &coord.longitud); return coord; } void escribir_coordenada_pantalla (tCoordenada coord) { printf("\n Coordenada: latitud=%.2f longitud=%.2f \n", coord.latitud, coord.longitud); } void posicionar_tortuga (tCoordenada coordenada) { posicion_inicial (coordenada.latitud,coordenada.longitud); } void dibujar_segmento ( tCoordenada cinicio, tCoordenada cfinal ) { float x,z; posicionar_tortuga (cinicio); angulo_inicial(0); x=angulo_segmento_abcisas (cinicio,cfinal); girar(x); z=calcular_distancia(cinicio,cfinal); avanzar(z); girar (-x); } float calcular_distancia (tCoordenada coord1, tCoordenada coord2) { float x,y,z; x=(coord2.latitud)-(coord1.latitud); y=(coord2.longitud)-(coord1.longitud); z=(float)sqrt(pow(x,2)+pow(y,2)); return z; } int escribir_coordenada_fichero(FILE *fp, tCoordenada coordenada) { char nombre_fichero [30]; fp = fopen (nombre_fichero,"w"); if (fp==NULL){ printf("Error, no s'ha pogut trobar el fitxer demanat.\n"); return 0; }else{ fprintf (fp,"(%f,%f)\n)",coordenada.latitud,coordenada.longitud); } return 1; fclose (fp); } int leer_coordenada_fichero(FILE *fp, tCoordenada *coordenada) { char nombre_fichero [30]; fp = fopen (nombre_fichero,"w"); if (fp==NULL){ printf("Error, no s'ha pogut trobar el fitxer demanat.\n"); return 0; }else{ fscanf (fp, "(%f,%f)\n",&coordenada->latitud,&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; }