gpt4 book ai didi

java - 计算两点之间网格上的距离

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:42 24 4
gpt4 key购买 nike

我需要计算网格上两点之间的距离。允许的移动是水平和垂直的以及与下一个邻居的对角线(因此旋转 45 度)。

所以曼哈顿距离不是一个选项。欧几里得距离也不是一个选项,因为它不会沿着网格正确移动,这会导致一个很低的值(如红线所示)。

我正在寻找从一个单元格移动到另一个单元格的绿线中的距离。

优选公式快

enter image description here

最佳答案

这很简单:

  • 您沿对角线向目标移动,直到您位于同一行或同一列。这将是 min(dx, dy) 步。

    让我们称之为d(对角线步骤)

  • 然后您沿直线朝目标移动。这将是 max(dx, dy) - d 步。

    我们称它为 s(表示直线步骤)

  • 距离是 √2 × d + s

在代码中:

double distance(int x1, int y1, int x2, int y2) {
int dx = abs(x2 - x1);
int dy = abs(y2 - y1);

int min = min(dx, dy);
int max = max(dx, dy);

int diagonalSteps = min;
int straightSteps = max - min;

return sqrt(2) * diagonalSteps + straightSteps;
}

关于java - 计算两点之间网格上的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30368632/

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