#include "defs.h" #include #include /* 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; }