C++:“Расстояние” между 2 координатами в двумерном массиве

StackOverflow https://stackoverflow.com//questions/21009421

  •  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 с негативным аргументом, вы сами по себе.

Вы вычитаете квадраты внутри вашего квадрата, а не добавлять их («... ...»).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top