gpt4 book ai didi

ios - 计算与网格中目标距离的最佳方法

转载 作者:行者123 更新时间:2023-11-29 03:02:17 24 4
gpt4 key购买 nike

我有一个这样的网格

我需要计算一个单元格与目标的距离。例如,单元格 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;



}

最佳答案

首先,您对列和行索引的计算不正确(它为每行中的最后一个单元格提供了错误的结果)。如果网格有 15 列并且第一个单元格有 #1 那么它应该是:

int columnTarget = (targetCoordinate - 1) % 15;
int lineTarget = (targetCoordinate - 1) / 15;

int columnObject = (objectCoordinate - 1) % 15;
int lineObject = (objectCoordinate - 1) / 15;

然后你可以计算水平和垂直差异为

int deltaX = abs(columnObject - columnTarget);
int deltaY = abs(lineObject - lineTarget);

但最后一步取决于您要计算的距离类型。

float distance = sqrt(pow(deltaX,2)+pow(deltaY,2));
// Or better:
float distance = hypotf(deltaX, deltaY);

给出 "Euclidean distance" ,即单元格中心之间的直线长度。

如果要计算水平、垂直和对角线所在的“最短路径”允许移动则距离为

int distance = MAX(deltaX, deltaY);

如果只允许水平和垂直移动那么最短的长度路径是

int distance = deltaX + deltaY;

关于ios - 计算与网格中目标距离的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23168669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com