All pastes #275206 Raw Edit

Mine

public text v1 · immutable
·published 2006-12-11 09:46 UTC
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;
}