在一個2D矩陣中,我想通過它的ID分別方向找到一個直接連接的鄰居。如何在2D矩陣中找到直接相連的鄰居?
我的意思:
X0 = X
Y0 = Y1
X1 = X + 1
Y1 = Y
X2 = X
Y2 = Y + 1
X3 = X - 1個
Y3 = Y
或作爲圖形:
╔═══════╗
║ N ║
║ x,y-1 ║
║ ║
╔═══════╬═══════╬═══════╗
║ W ║ ║ E ║
║ x-1,y ║ x,y ║ x+1,y ║
║ ║ ║ ║
╚═══════╬═══════╬═══════╝
║ S ║
║ x,y+1 ║
║ ║
╚═══════╝
幾年前,當我開始編程我有同樣的問題,並與可以大大提高一個醜陋的switch-case解決它:
if (mode == 'Y'){
switch(direction){
case 1:
return -1;
case 2:
return 0;
case 3:
return 1;
case 4:
return 0;
default:
break;
}
}
if (mode == 'X'){
switch(direction){
case 1:
return 0;
case 2:
return 1;
case 3:
return 0;
case 4:
return -1;
default:
break;
}
}
小區應該是用X,Y單式訪問和方向(N,E,S,W例如0-3)
我不想擁有所有的鄰居,比如定義它周圍的空間(x-1,y-1到x + 1,y + 1)。這隻會反覆拋出廣場而變得簡單。我只想要一個單元格。
這聽起來很簡單,但讓我頭痛尋找一個簡短,快速和合法的解決方案。首選語言是C++
我很高興您的解決方案!
編輯
我現在想通了這個問題。
在此請看:Graph
可悲的是IM尚未允許張貼圖片,但你可以看到與代表方向的常數圖的交叉點正是要被添加到x座標爲你可以在上面看到
這意味着,我們可以用一個簡單的正弦波用於獲取y和從這個公式是:
x1 = x + cos((2*pi*(dir-1))/4)
y1 = y + cos((2*pi*(dir-2))/4)
雖然dir
是從0到3
這就是我找到一個純粹的數學計算方法連接的鄰居的解決方案。當然,這可以用某種方式來解釋?
感謝您的解決方案!期待看到您解決這個問題的方案!
乾杯!
歡迎SO!請解釋你在目前的解決方案中存在的問題以及你認爲什麼是「合適的」解決方案。 –
偏題:「一個細胞應該可以通過一個單一的公式與x,y和方向(N,E,S,W,例如0-3)」推薦使用enum來代替數字0..3很好,易於閱讀的名字。 – user4581301