【问题标题】:Circumference intersection algorithm圆周相交算法
【发布时间】:2012-02-13 13:42:37
【问题描述】:

我有一个点数组,其中(点)我知道坐标(在我的坐标平面中,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 提供方法名称和维基百科文章。

【问题讨论】:

  • 您是否可以将dist 更改为表示距离平方的整数数组,或者它是否必须发生在一堆作为某事物平方根的双精度数中,因此可能不精确?
  • 我有一个点数组,其中(点)我知道坐标(在我的坐标平面中,x/y)。然后我有一个未知坐标点,但我知道从“已知”点到该点的距离。我正在寻找“未知”点坐标。它应该是一种三角测量。
  • 这个问题的名称是“三边测量”。你可能想在谷歌上搜索那个词。碰巧Wikipedia is "out" today 但这个链接应该让你在美国东部标准时间午夜开始时开始。这在精确算术中不是一个难题,但现实世界的版本当然会考虑距离的测量误差,这使得它更具挑战性。
  • @hardmath 谢谢你的名字 :) 现在我知道我应该在哪个方向继续我的研究

标签: algorithm math intersection


【解决方案1】:

重申问题:您有以basePoint[n] 为中心的n 圆,半径为dist[n],已知它们有一个共同的交点。你想找到那一点。

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

【讨论】:

  • 对不起,我给出了错误的解释,请尝试重新阅读问题:)
  • @dtumaykin,对不起,我仍然不明白你在问什么。这就是为什么我试图重申这个问题。你能具体说明我的版本是怎么错的吗?
  • 我以与@BenJackson 相同的方式解释问题中描述的问题,但我看不到不同的解释。
  • 你假设n个圆周具有相同的中心和不同的半径。我想有不同中心的n个圆周。以及对应于圆周交点的点。
  • @dtumaykin:我想不同中心,每个basePoint[n]代表所有n
【解决方案2】:

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

如果你只有 2 个点的坐标并且你有这 2 个坐标和第三个点(未知)之间的距离,比如 X(x,y)。

假设你的第一个点是 A(x1,y1),你的第二个点是 B(x2,y2)

现在你想找到未知点 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 个线性方程,其中有 2 个此类未知变量

mx+ny - d1 = 0

 and 

 px+ qy - d2 = 0 

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

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

【讨论】:

  • 我只能从“d1 = sqrt((x1-x)^2 +(y1-y)^2)”推导出一个二次方程。假设例如 A(1,2), B(4,2), d1 = 2, d2 = V2。哪些线性方程是从这些数据推导出来的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多