PHP Найти координаты между двумя точками

простой вопрос здесь. Допустим, у меня есть два момента:

point 1 x = 0 y = 0 point 2 x = 10 y = 10 

Как бы я узнал все координаты между ними программно, предполагая, что между двумя точками есть линия прохода … так что приведенный выше пример вернется:

 0,0 1,1 2,2 3,3 ... 8,8 9,9 10,10 

Благодаря 🙂

спасибо за всю вашу помощь, но не ответы, которые отвечали, работали так, как я этого хотел. Например, скажем, мои очки были:

0, 0

0, 10

Там будет только начальная и конечная координаты … он не найдет тех, которые между ними.

Может быть, я сделал что-то не так: S, но я придумал свое решение:

 // Points $p1 = array( 'x' => 50, 'y' => 50 ); $p2 = array( 'x' => 234, 'y' => 177 ); // Work out distances $pxd = $p2['x'] - $p1['x']; $pyd = $p2['y'] - $p1['y']; // Find out steps $steps = max($p1['x'], $p1['y'], $p2['x'], $p2['y']); $coords = array(); for ($i = 0; $i < $steps; ++ $i) { $coords[] = array( 'x' => round($p1['x'] += $pxd / $steps), 'y' => round($p1['y'] += $pyd / $steps) ); } print_r($coords); 

Сначала вам нужно найти наклон линии:

 m = (y1 - y2) / (x1 - x2) 

Затем вам нужно найти уравнение линии:

 y = mx + b 

В вашем примере вы получаем:

 y = 1x + b 0 = 1(0) + b 

или

 y = x 

Чтобы получить все координаты, вам просто нужно подключить все значения x1 -> x2. В PHP все это выглядит примерно так:

 // These are in the form array(x_cord, y_cord) $pt1 = array(0, 0); $pt2 = array(10, 10); $m = ($pt1[1] - $pt2[1]) / ($pt1[0] - $pt2[0]); $b = $pt1[1] - $m * $pt1[0]; for ($i = $pt1[0]; $i <= $pt2[0]; $i++) $points[] = array($i, $m * $i + $b); 

Это, конечно же, даст вам координаты для всех точек, которые попадают на целые значения X, а не «все координаты» между двумя точками.

  1. Используйте линейное уравнение, y = mx + c
  2. Положим (0,0) и (10,10), чтобы получить два уравнения и решить получить значения m и c. (вы сможете найти прямые уравнения, чтобы получить m и c где-нибудь).
  3. Затем создайте цикл для начала с x = x1 (0) до x = x2 (10)
  4. Используя y = mx + c, получим значение y (теперь, когда вы знаете m и c)

Более простой алгоритм – найти среднюю точку, усреднив координаты, повторить, пока вы не закончите. Просто хотел указать, потому что никто не делал.

Для генерации всех точек решетки (точек с целыми координатами) на отрезке между (x1, y1) и (x2, y2), где x1, x2, y1 и y2 являются целыми числами:

 function gcd($a,$b) { // implement the Euclidean algorithm for finding the greatest common divisor of two integers, always returning a non-negative value $a = abs($a); $b = abs($b); if ($a == 0) { return $b; } else if ($b == 0) { return $a; } else { return gcd(min($a,$b),max($a,$b) % min($a,$b)); } } function lattice_points($x1, $y1, $x2, $y2) { $delta_x = $x2 - $x1; $delta_y = $y2 - $y1; $steps = gcd($delta_x, $delta_y); $points = array(); for ($i = 0; $i <= $steps; $i++) { $x = $x1 + $i * $delta_x / $steps; $y = $y1 + $i * $delta_y / $steps; $points[] = "({$x},{$y})"; } return $points; }