php在2D中查找点的距离和线段而不是线

时间:2017-04-23 12:38:37

标签: php distance point segment

我有两个点,如p1(a,b)和p2(c,d) 我的观点是X(x,y)

我搜索过并发现here

但它不是PHP 任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

免责声明:我假设来自链接答案的JS代码。

以下是我尝试将javascript代码从here转换为PHP。

function sqr($x) { return $x * $x; }
function dist2($v, $w) { return sqr($v->x - $w->x) + sqr($v->y - $w->y); }
function distToSegmentSquared($p, $v, $w) {
    $l2 = dist2($v, $w);
    if ($l2 == 0) return dist2($p, $v);
    $t = (($p->x - $v->x) * ($w->x - $v->x) + ($p->y - $v->y) * ($w->y - $v->y)) / $l2;
    $t = max(0, min(1, $t));
    return dist2($p, (object) array('x' => $v->x + $t * ($w->x - $v->x),
                    'y' => $v->y + $t * ($w->y - $v->y) ));
}
function distToSegment($p, $v, $w) { return sqrt(distToSegmentSquared($p, $v, $w)); }

像这样使用它:

$p = (object) array('x' => 2, 'y' => 2);
$v = (object) array('x' => 9, 'y' => 2);
$w = (object) array('x' => 2, 'y' => 9);

echo distToSegment($p, $v, $w);

<小时/> <小时/>

将JS输出与PHP输出进行比较:

TEST 1

有关

x = {x:2, y:2}
v = {x:9, y:2}
w = {x:2, y:9}

JS OUTPUT:

  

4.949747468305833

PHP输出:

  

4.9497474683058

TEST 2

对于

x = {x:1, y:9}
v = {x:4, y:4}
w = {x:4, y:9}

JS OUTPUT:

  

3

PHP输出:

  

3

TEST 3

对于

x = {x:5, y:6}
v = {x:2, y:9}
w = {x:8, y:2}

JS OUTPUT:

  

0.32539568672798375

PHP输出:

  

0.32539568672798