2010-08-13 7 views
1

я пытался несколько функций, включая 2D те, чтобы попытаться получить это несколько работает, но не повезло еще ...Расчет пересекаются точки 2 LAT/LNG отрезков, на земле

У меня 2 отрезками latlng endpoints на земле, и я хочу знать, где и где пересекаются две линии.

В настоящее время я работаю с этим, что говорит майор физики, должно делать работу для 2d-самолета, но его нет. она всегда возвращает истину пересекаются

[код] функция 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 

} [/ код]

ответ

0

Предположение: ваши отрезки являются great circle дуги.

Любая пара отличных кругов пересекает ровно в два раза. Итак, вы можете:

  1. Найдите две точки пересечения.
  2. Посмотрите, находятся ли точки пересечения в ваших дугах.

Here - обсуждение этого метода.

 Смежные вопросы

  • Нет связанных вопросов^_^