rendered paste body#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;
}