Php набирает расстояние от точки, а отрезок линии не является линией в 2D У меня есть две точки линии, такие как p1 (a, b) и p2 (c, d) моя точка X (x, y) Я искал и нашел здесь но это не php кто-нибудь может мне помочь Ответ 1 ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я предполагается работает 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 OUTPUT: 4,949747468305833 PHP OUTPUT: +4,9497474683058 ТЕСТ 2 Для x = {x:1, y:9} v = {x:4, y:4} w = {x:4, y:9} JS OUTPUT: 3 PHP OUTPUT: 3 ТЕСТ 3 Для x = {x:5, y:6} v = {x:2, y:9} w = {x:8, y:2} JS OUTPUT: +0,32539568672798375 PHP OUTPUT: +0,32539568672798
Ответ 1 ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я предполагается работает 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 OUTPUT: 4,949747468305833 PHP OUTPUT: +4,9497474683058 ТЕСТ 2 Для x = {x:1, y:9} v = {x:4, y:4} w = {x:4, y:9} JS OUTPUT: 3 PHP OUTPUT: 3 ТЕСТ 3 Для x = {x:5, y:6} v = {x:2, y:9} w = {x:8, y:2} JS OUTPUT: +0,32539568672798375 PHP OUTPUT: +0,32539568672798