C++:“Расстояние” между 2 координатами в двумерном массиве
-
21-12-2019 - |
Вопрос
Для игры, которую я пишу, мне нужно найдите целочисленное значение расстояния между двумя наборами координат.Это Двумерный массив в котором хранятся разные карты.(Как в оригинальной zelda).Чем дальше вы уходите от центр (5,5) чем больше должно быть это число, тем больше сложность врагов.В идеале это должно быть от 0 до 14.То массив равен 11x11.
Теперь я попытался использовать пифагор формула, которую я помню со школьной скамьи, но она извергается числа переполнения.Я не могу понять почему.
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];
Решение
srand(rand());
не имеет смысла, так и должно быть srand(time(NULL));
не используйте pow
для квадрата просто используйте x*x
ваша формула также неверна, вы должны сложить число вместе, а не минус
sqrt
вернуть double
и брошен в int
округлю его в меньшую сторону
я думаю sqrt
всегда возвращайте положительное число
ты знаешь abs
существует, верно?почему бы не воспользоваться этим?тоже distance = -distance
это лучше, чем 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];
Другие советы
Это ^ 2 + b ^ 2= C ^ 2, а не минус.После того, как вы позвоните SQRT с негативным аргументом, вы сами по себе.
Вы вычитаете квадраты внутри вашего квадрата, а не добавлять их («... ...»).