Для игры, которую я пишу, мне нужно найти целочисленное значение для расстояния между двумя наборами координат. Это 2D массив который содержит разные карты. (Как и оригинальная зельда). Чем дальше вы идете от центр (5,5) чем выше число должно быть, так как сложность врагов увеличивается. В идеале это должно быть от 0 до 14. массив 11×11.
Теперь я попытался использовать Пифагор формула, которую я помню из старшей школы, но она извергает номера переполнения. Я не могу понять, почему.
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 с отрицательным аргументом, вы сами по себе.
Вы вычитаете квадраты внутри своего квадратного корня, вместо того, чтобы добавлять их («… — па …»).