给定一个宽度与长度(例如5 x 4)的网格以及该网格上的点的X和Y坐标数组,打印从网格上的每个点到坐标的距离,如下所示:
width = 5
len = 4
x coords =(2,4)
y coords =(2,3)
2123
1012
2112
2101
3212
"跨越"是+ 2,垂直或水平移动是+1
假设xCoords.length = yCoords.length
我稍后会发布我的解决方案,或者更确切地说是尝试解决方案。我试图想出一个函数来调整从网格坐标(i,j)到点的坐标的距离......我基本上是
for i .. width
for j .. length
getDistance(i,j, xCoords,yCoords)
(0,0)(0,1)(0,2)(0,3)
(1,0)(1,1)(1,2)(1,3)
(2,0)(2,1)(2,2)(2,3)
等...
到那些坐标处的实际距离值。
答案 0 :(得分:2)
我假设你正在寻找向量中给出的距离最近的coord
的距离,即
for i 0 .. width
for j 0 .. length
best = distance(i, j, coords[0].x, coords[0].y)
for k 1 .. coordVector // Skip first element
best = min(best, distance(i, j, coords[k].x, coords[k].y)
result[i][j] = best
第三个嵌套循环检查给定坐标到(x i ,y i 向量中所有坐标的距离> ),选择最短的一个,并将其存储在变量best
中。请注意,best
初始化为距离向量中第一个点的距离,因此嵌套循环从第二个点开始。
现在您只需要distance
的计算器。根据问题描述,您正在寻找Manhattan Distance因为对角线步长被加权为2,这意味着它与水平一步加一步垂直相同:
distance(x0, y0, x1, y1)
horizontal = abs(x1-x0)
vertical = abs(y0-y1)
return horizontal + vertical
答案 1 :(得分:0)
你想使用毕达哥拉斯定理。 sqrt((i-xCords)*(i-xCords)+(j-yCords)*(j-yCords))
答案 2 :(得分:0)
int getDistance(int x1, int y1, int x2, int y2) {
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}
答案 3 :(得分:0)
相关:I want to calculate the distance between two points in Java
距离= Math.sqrt(Math.pow((i-xCords),2)+ Math.pow((j-yCords),2));