如何找到两个圆之间的交点?

时间:2013-10-21 05:57:23

标签: php

我们有两个点(两个圆圈的中心)和半径(以米为单位),这些半径构成圆圈。我们需要找到交叉点。例如,我们有lat1 = 55.685025,lng1 = 21.118995,r1 = 150,lat2 = 55.682393,lng2 = 21.121387,r2 = 250.您可以在下面找到我们当前的公式:

// Find a and h.
$a = ($circle_1_r * $circle_1_r - $circle_2_r * $circle_2_r + $distance * $distance) / (2 * $distance);
$h = sqrt($circle_1_r * $circle_1_r - $a * $a);

// Find P2.
$circle_3_x = $circle_1_x + $a * ($circle_2_x - $circle_1_x) / $distance;
$circle_3_y = $circle_1_y + $a * ($circle_2_y - $circle_1_y) / $distance;

// Get the points P3.
$intersection_1 = $this->newLatLngPoint(
    ($circle_3_x + $h * ($circle_2_y - $circle_1_y) / $distance),
    ($circle_3_y - $h * ($circle_2_x - $circle_1_x) / $distance)
);

$intersection_2 = $this->newLatLngPoint(
    ($circle_3_x - $h * ($circle_2_y - $circle_1_y) / $distance),
    ($circle_3_y + $h * ($circle_2_x - $circle_1_x) / $distance)
);

我们找到了这样的交叉点(黄色标记),但这些位置在现实世界中并不匹配。

enter image description here

有人可以帮助找出问题所在以及如何对其进行排序?

P.S。 海拔高度(高于平均海平面的高度)是否会影响最终结果?我不使用它但可能应该使用它?

0 个答案:

没有答案