C ++:2D数组中2个坐标之间的“距离”

时间:2014-01-09 00:24:04

标签: c++ arrays pythagorean

对于我正在编写的游戏,我需要找到两组坐标之间距离的整数值。它是一个 2D数组,用于保存不同的地图。 (就像原始的塞尔达)。你离中心(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];

3 个答案:

答案 0 :(得分:1)

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];

答案 1 :(得分:0)

它是^ 2 + b ^ 2 = c ^ 2,而不是减去。一旦你用负参数调用sqrt,你就可以自己动手了。

答案 2 :(得分:0)

你在平方根中减去方格,而不是添加它们(“...- pow ......”)。