j'ai essayé plusieurs fonctions, y compris celles en 2D pour essayer d'obtenir ce peu de travail, mais pas encore la chance ...Calcul Intersection point de 2 lat/segments de ligne lng sur la terre
J'ai 2 segments de ligne de latlng extrémités sur la terre, et je veux savoir si et où les 2 lignes se croisent.
Je suis actuellement en train de travailler avec ce qu'un major de physique dit devrait faire le travail pour un avion 2d mais ce n'est pas le cas. il retourne toujours vrai pour Intersection
[code] fonction intersectPoint (line1start $, $ line1end, $ line2start, $ line2end) // ($ p0_x, $ p0_y, $ p1_x, $ p1_y, $ p2_x, $ p2_y, $ p3_x, $ p3_y) { $ p0_x = $ line1start ['lat']; $ p0_y = $ line1start ['lng']; $ p1_x = $ line1end ['lat']; $ p1_y = $ line1end ['lng']; $ p2_x = $ line2start ['lat']; $ p2_y = $ line2start ['lng']; $ p3_x = $ line1end ['lat']; $ p3_y = $ line1end ['lng'];
$s1_x = (double) $p1_x - (double) $p0_x;
$s1_y = (double) $p1_y - (double) $p0_y;
// s1_x = p1_x - p0_x; // s1_y = p1_y - p0_y; $ s2_x = (double) $ p3_x - (double) $ p2_x; $ s2_y = (double) $ p3_y - (double) $ p2_y; $ s3_x = (double) $ p0_x - (double) $ p2_x; $ s3_y = (double) $ p0_y - (double) $ p2_y; // s2_x = p3_x - p2_x; // s2_y = p3_y - p2_y;
$s = (double) ((double)(-$s1_y * $s3_x + $s1_x * $s3_y)/(double) (-$s2_x * $s1_y + $s1_x * $s2_y));
$t = (double) ((double)($s2_x * $s3_y - $s2_y * $s3_x)/(double) (-$s2_x * $s1_y + $s1_x * $s2_y));
// s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y))/(-s2_x * s1_y + s1_x * s2_y); // t = (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x))/(-s2_x * s1_y + s1_x * s2_y);
if ($s >= 0 && $s <= 1 && $t >= 0 && $t <= 1)
{
AppCommUtility::echof(" FUNC RETURNED TRUE $s >= 0 && $s <= 1 && $t >= 0 && $t <= 1");
// Collision detected
return array(
'lat' => $p0_x + ($t * $s1_x),
'lng' => $p0_y + ($t * $s1_y)
);
}
return null; // No collision
} [/ code]