C++:"Distancia" entre 2 coordenadas en una matriz 2D
-
21-12-2019 - |
Pregunta
Para un juego que estoy escribiendo necesito encontrar un valor entero para la distancia entre dos conjuntos de coordenadas.Es un matriz 2D que contiene los diferentes mapas.(Como el zelda original).Cuanto más te alejas del centro (5,5) cuanto mayor debe ser el número ya que aumenta la dificultad de los enemigos.Lo ideal debería ser entre 0 y 14.El la matriz es 11x11.
Ahora, intenté usar el Pitágoras Fórmula que recuerdo de la escuela secundaria, pero está saliendo a borbotones. números desbordados.No puedo entender por qué.
srand(rand());
int distance=sqrt(pow((5-worldx), 2)-pow((5-worldy), 2));
if(distance<0) //alternative to abs()
{
distance+=(distance * 2);
}
if(distance>13)
{
distance=13;
}
int rnd=rand()%(distance+1);
Monster testmonster = monsters[rnd];
Solución
srand(rand());
no tiene sentido, debería serlo srand(time(NULL));
no usar pow
para cuadrado, solo usa x*x
tu fórmula también es incorrecta, debes sumar el número, no menos
sqrt
devolver double
y lanzar a int
lo redondeará hacia abajo
creo sqrt
siempre devuelve un número positivo
sabes abs
existe verdad?¿Por qué no usarlo?también distance = -distance
es mejor que distance+=(distance * 2)
srand(time(NULL));
int dx = 5 - worldx;
int dy = 5 - worldy;
int distance=sqrt(dx * dx + dy * dy);
if(distance>13)
{
distance=13;
}
int rnd=rand()%(distance+1);
Monster testmonster = monsters[rnd];
Otros consejos
es un ^ 2 + b ^ 2= c ^ 2, no menos.Una vez que llame a SQRT con un argumento negativo, estás por su cuenta.
Estás restando cuadrados dentro de su raíz cuadrada, en lugar de agregarlos ("...- pow ...").