2017-04-23 2 views

Répondre

0

DISCLAIMER: Je supposais le code JS des œuvres de réponse liées. Voici ma tentative de convertir le code javascript de here en PHP ci-dessous.

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

Utilisez-le comme suit:

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



En comparant la sortie JS avec sortie PHP:

ESSAI 1

Pour

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

JS SORTIE:

4,949747468305833

PHP SORTIE:

4,9497474683058


ESSAI 2

Pour

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

JS SORTIE:

PHP SORTIE:


ESSAI 3

Pour

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

JS SORTIE:

0.32539568672798375

PHP SORTIE:

0,32539568672798