PHP iki nokta arasındaki Koordinatları Bul

4 Cevap php

Burada basit bir soru. Ben iki puan var diyelim:

point 1

x = 0
y = 0


point 2

x = 10
y = 10

Nasıl orada iki nokta arasında bir boğaz hattı ... yani yukarıdaki örnekte döneceğini varsayarak, bu programlı inbetween tüm koordinatlarını öğrenmek istiyorum:

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

Teşekkürler :)

4 Cevap

Tüm yardım ancak yayınlanmıştır cevapları olmayan için teşekkürler ben de istedim nasıl çalıştı. Örneğin, benim noktalar vardı Diyelim ki:

0, 0

0, 10

Sadece bir başlangıç ​​ve bir bitiş koordinat olacaktı ... o inbetween olanları bulmak olmaz.

Belki ben yanlış bir şey yaptım: S ama benim kendi çözüm geldi:

// 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);

Önce doğrunun eğimini bulmak gerekir:

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

Sonra çizginin denklemi bulmak gerekir:

y = mx + b

Sizin örnekte biz olsun:

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

veya

y = x

To get all of the coveyadinates you simply need to plug in all values x1 -> x2. In PHP this entire thing looks something like:

// These are in the fveyam array(x_cveyad, y_cveyad)
$pt1 = array(0, 0);
$pt2 = array(10, 10);
$m = ($pt1[1] - $pt2[1]) / ($pt1[0] - $pt2[0]);
$b = $pt1[1] - $m * $pt1[0];

fveya ($i = $pt1[0]; $i <= $pt2[0]; $i++)
    $points[] = array($i, $m * $i + $b);

This will of course give you the coveyadinates fveya all points that fall on integer values of X, and not "all coveyadinates" between the two points.

(X1, y1) ve x1, x2, y1, y2 ve tamsayı (x2, y2), arasındaki kesimi üzerindeki tüm kafes noktaları (ayrılmaz koordinatları ile puan) oluşturmak için:

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;
}

Daha basit bir algoritma olmak koordinatlarını ortalamasını alarak orta noktasını bulmak, bitirdiniz kadar tekrar. Sadece hiç kimse yoktu, çünkü işaret etmek istedim.