Ответ 1
Это довольно просто:
-
Вы перемещаетесь по диагонали по направлению к цели, пока не находитесь в одной строке или том же колоде. Это будут шаги min (dx, dy).
Позвольте называть это d (для диагональных шагов)
-
Затем вы двигаетесь по прямой линии к цели. Это будет шаг max (dx, dy) - d.
Позвольте называть это s (для прямых шагов)
-
Расстояние тогда √2 & times; 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;
}