PHP найти расстояние от точки и отрезка, а не линии в 2D

У меня есть две точки линии, такие как p1 (a, b) и p2 (c, d)
моя точка зрения X (x, y)

Я искал и нашел как Вот

но это не php
Может кто-нибудь мне помочь

0

Решение

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я предполагается, код JS из связанного ответа работает.

Ниже моя попытка преобразовать код JavaScript из Вот в 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:

ТЕСТ 1

За

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

ВЫХОД JS:

+4,949747468305833

PHP ВЫХОД:

+4,9497474683058


ТЕСТ 2

За

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

ВЫХОД JS:

3

PHP ВЫХОД:

3


ТЕСТ 3

За

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

ВЫХОД JS:

+0,32539568672798375

PHP ВЫХОД:

+0,32539568672798

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]