0
我有一個這樣的網格計算網格中目標的距離的最佳方法
而且我需要計算從一個單元格到目標的距離。例如,小區64是目標,小區99是當前位置。
99的可能路徑必須是例如單元格83,83,66和65 路徑76,62,63是不正確的。
我計算與此功能的距離,但我認爲這是沒有得到很好的加權
-(float)distanceFromTarget:(int)targetCoordinate ofCurrentObject:(int)objectCoordinate{
int columnTarget = (targetCoordinate % 15)-1;
int lineTarget = (targetCoordinate /15);
int columnObject = (objectCoordinate % 15)-1;
int lineObject = (objectCoordinate /15);
float lato1;
float lato2;
if(columnObject>columnTarget) {
lato1 = columnObject - columnTarget;
}
else lato1= columnTarget - columnObject;
if(lineObject>lineTarget) {
lato2 = lineObject - lineTarget;
}
else lato2= lineTarget - lineObject;
float distance = sqrt(pow(lato1,2)+pow(lato2,2));
return distance;
}
非常感謝您的回答!我喜歡!我只有一些疑問, 1)我無法理解float distance = hypotf(deltaX,deltaY); int距離= MAX(deltaX,deltaY); 2)如何規範化距離?例如最大值必須介於0和10之間。 3)使用我的代碼,例如目標在單元格62中,對象在單元格69中。我的函數將爲單元格61輸出更好的距離!但是這一舉措是不允許的......我該如何解決這個問題? –
@UsiUsi:允許什麼動作? –
水平,垂直和對角線移動。但是物體不能越過邊界。例如它不能直接從單元格69到61!在該位置,距離必須很高,以阻止對象選擇單元格61中的路徑。單元格68中的距離必須更小,以便對象選擇它! –