簡體   English   中英

C ++在2D數組中找到兩點之間的距離

[英]C++ finding distance between two points in 2D array

我現在正在使用繼承,我沒有問題。 我有這個字符串向量(基本上是char的2D數組)。

確切的中間是鯊魚的位置,鯊魚的性格根據其他魚的位置而變化。

例如

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

箭頭是魚的位置,因為魚是左邊的。 鯊魚變成'l'

.>...
.....
..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

如果是'。' char不存在於魚的位置,所以鯊魚應指向那個方向。

問題發生在有多條魚的地方。

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

我理解我應該做什么,但我不知道該怎么做,或者如何開始。 目標只是讓鯊魚面向最近魚的方向。 所以基本上箭頭“最接近”中間。 有人可以幫助我開始這個嗎? 也許是一個單獨的函數來計算每個元素與中心的距離?

您需要計算每條魚的距離 - 為此,您可以將魚的位置轉換為(x,y)坐標。 鯊魚的位置是(0,0)坐標。

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

would be (-2,0) for the fish ^

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

would be (-1,3) for the fish >

所以這種從2D的坐標轉換很容易。 對於距離,你在二維中使用pythagoros定理 - 在這種情況下,它只是x坐標的平方的正方根+ y坐標的平方。 然后,您需要另一個新陣列來存儲每條魚的距離。 然后你需要搜索新的距離數組以獲得最小值,其中數組的索引是魚索引(如魚的id)。 這將為您提供離鯊魚最近的魚類,因此如果有一個拳頭,您可以讓鯊魚面向正確的方向。 但是如果有不止一條距離相同的魚,你需要在這種情況下考慮一個新的規則(例如,如果剩下的魚比右邊多,左右魚距離相同的距離 - 然后面對左邊因為有更多的魚? - 或鯊魚食物 - 是一個建議)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM