圆周交叉算法

时间:2012-01-18 20:24:18

标签: algorithm math intersection

我有一个点数组,其中(点)我知道坐标(在我的坐标平面中,x / y)。然后我有一个未知坐标点,但我知道从“已知”点到那一点的距离。我正在寻找“未知”点坐标。应该是一种三角测量。

我已经考虑用方程组来描述情况。

让我们假设这个数据:

coord[n] basePoints;
double[n] dist;
coord result;

让思考coord就像:

struct {
    double x,y;
};

现在,圆周方程为:

x^2 + y^2 + ax + bx + c = 0
where:
a = basePoint[i].x
b = basePoint[i].y
c = a^2 + b^2 + r^2
r = dist[i]

在这种情况下,我们需要3个点来确定结果点的位置,因此我们需要一个由三个方程组成的系统。问题是:是否有一些快速的方法来找出结果坐标,但没有,是否有算法可以遵循?

编辑:

我找到了我在这里寻找的算法Trilateration using 3 latitude and longitude points, and 3 distances

还要非常感谢@hardmath提供的方法名称和维基百科文章。

2 个答案:

答案 0 :(得分:3)

重述问题:您的n个圆圈居中于basePoint[n],半径为dist[n],已知这些圆圈有一个公共交叉点。你想找到那一点。

取前两个圆并找到它们的交点。有1或2(或0,但问题没有解决方案)。如果是1,那应该是答案。如果为2,则消除下一个圆圈的歧义。您可以继续验证该点是否在所有其他圈子上。

答案 1 :(得分:0)

首先,你说你有n个点的坐标,以及到另一个点的距离(所以n个距离)。

如果您的坐标只有2个点,那么这两个坐标和第三个点(未知)之间的距离就是X(x,y)。

让我们说你的第一个点是A(x1,y1),你的第二个点是B(x2,y2)

现在你想找到未知的Point X(x,y)

你可以像这样得到A和x之间的距离

d1 = sqrt((x1-x)^2 +(y1-y)^2)

这里你已经知道了x1,y1和d

并且类似地,B和X之间的距离将是

d2 = sqrt((x2-x)^2-(y2-y)^2)

所以通过这两个方程,你将得到2个线性方程,其中包含2个这种类型的未知变量

mx+ny - d1 = 0

 and 

 px+ qy - d2 = 0 

你可以求解这两个方程来得到点X(x,y)的x和y坐标。

您还没有提到您正在使用的编程语言,但您可以使用您选择的任何编程语言来实现。 你不需要n点和n个距离来计算未知点,你可以用2点来计算它。