查找二维数组中两点之间的距离

C++ finding distance between two points in 2D array

本文关键字:两点 之间 距离 二维数组 查找      更新时间:2023-10-16

我现在正在使用继承,我没有任何问题。我有这个字符串向量(基本上是一个二维字符数组)。

确切的中间是鲨鱼所在的位置和鲨鱼的特征根据其他鱼的位置变化

例如

.....
.....
^.l..
.....
.....

箭头是鱼所在的位置,因为鱼在左边。鲨鱼变成了"l"

.>...
.....
..u..
.....
.....

箭头是鱼所在的位置,因为鱼在上面。鲨鱼变成了"u"

我必须正确执行的代码是:

void Shark::point(std::vector<std::string>& map){
if (map[0][0] != '.' || map[1][0] != '.' || map[2][0] != '.' || map[3][0] != '.' || map[4][0] != '.' || map[1][1] != '.' || map[2][1] != '.' || map[3][1] != '.'){
ProtoFish::m_direction = Direction::left;
}
if (map[0][1] != '.' || map[0][2] != '.' || map[0][3] != '.' || map[1][2] != '.'){
ProtoFish::m_direction = Direction::up;
}
if (map[4][1] != '.' || map[4][2] != '.' || map[4][3] != '.' || map[3][2] != '.'){
ProtoFish::m_direction = Direction::down;
}
if (map[0][4] != '.' || map[1][4] != '.' || map[2][4] != '.' || map[3][4] != '.' || map[4][4] != '.' || map[1][3] != '.' || map[2][3] != '.' || map[3][3] != '.'){
ProtoFish::m_direction = Direction::right;
}
}

我基本上只是检查鱼是否在这张地图上:

    l u u u r
    l l u r r
    l l . r r
    l l d r r
    l d d d r

where if '。"char不存在,那是鱼所在的方向,所以鲨鱼应该指向那个方向。

问题发生在有多条鱼的地方。

>....
..>..
..*..
.>...
..^>.

我知道我应该做什么,但我不知道怎么做,甚至不知道如何开始。我们的目标只是让鲨鱼面对最近的鱼的同一个方向。所以基本上箭头"最接近"中间。有人能帮我从这个开始吗?也许像一个单独的函数来计算每个元素到中心的距离?

您需要计算每条鱼的距离-要做到这一点,您将鱼的位置转换为(x,y)坐标。鲨鱼所在的位置是(0,0)坐标。

.....
.....
^.l..
.....
.....
would be (-2,0) for the fish ^
.>...
.....
..u..
.....
.....
would be (-1,3) for the fish >

所以从2D坐标转换很容易做到。对于距离你在二维中使用毕达哥拉斯定理,在这种情况下根号下x坐标的平方+ y坐标的平方。然后需要另一个新的数组来存储每条鱼的距离。然后你需要在新的距离数组中搜索最小的值数组的索引是一个fish索引(就像fish的id)。这将给你最接近鲨鱼的鱼,这样你就可以让鲨鱼面对正确的方向,如果有一个拳头。然而,如果有不止一条鱼在相同的距离,你需要考虑一个新的规则,例如,在这种情况下(如果左边的鱼比右边的鱼多,左边和右边的鱼距离相同,然后面向左边,因为有更多的鱼?