54 lines
1.4 KiB
C
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;
|
|
}
|
|
|