elefantes/distancia.c
2021-10-24 14:01:57 +02:00

54 lines
1.4 KiB
C

#include "defs.h"
#include <math.h>
#include <stdio.h>
/* colle duas coordenadas e calcula a distancia */
double distancia(struct coord c, struct coord e) {
int cat1 = c.x - e.x;
int cat2 = c.y - e.y;
return sqrt(pow(cat1, 2) + pow(cat2, 2));
}
/* devolve a nova coordenada á que moverse o elefante cando fuxe */
struct coord fuxir(struct coord c, struct coord e) {
/* definese velocidade por si o dia de mañá queremos acelerar o fuxir */
int velocidade = 1;
/* vector imaxinario */
float X = e.x - c.x;
float Y = e.y - c.y;
/* loxitude vector imaxinario */
float lonxitude = sqrtf(X*X + Y*Y);
/* printf("Vector imaxinario\n"); */
/* printf("X: %f\n", X); */
/* printf("Y: %f\n", Y); */
/* printf("Lonxitude: %f\n", lonxitude); */
/* usamos a lonxitude para normalizar o vector imaxinario */
X = X / lonxitude;
Y = Y / lonxitude;
/* redondease o modificador ó int máis cercano */
int dX = (int)(X < 0 ? (X - 0.5) : (X + 0.5));
int dY = (int)(Y < 0 ? (Y - 0.5) : (Y + 0.5));
/* aplicase a velocidade ó vector imaxinario */
dX = dX * velocidade;
dY = dY * velocidade;
/* printf("Modif. X: %f\n", X); */
/* printf("Modif. Y: %f\n", Y); */
/* printf("Modif. dX: %i\n", dX); */
/* printf("Modif. dY: %i\n", dY); */
/* aplicase o vector imaxinario de movemento ó elefante para desplazalo */
e.x = e.x + dX;
e.y = e.y + dY;
return e;
}