algorithm - 三边测量和定位点 (x,y,z)

标签 algorithm localization geometry triangulation trilateration

我想找到位于空间中某处的未知节点的坐标,该节点的引用距离远离 3 个或更多节点,这些节点都具有已知坐标。

这个问题与这里描述的三边测量完全一样 Trilateration .

但是,我不明白有关“初步和最终计算”的部分(请参阅维基百科网站)。我不知道在哪里可以找到 P1、P2 和 P3,所以我可以计算这些等式?

谢谢

最佳答案

三边测量是寻找三个球体相交区域的中心的过程。必须知道三个球体的中心点和半径。

让我们考虑一下您的三个示例中心点 P1 [-1,1]、P2 [1,1] 和 P3 [-1,-1]。第一个要求是 P1' 位于原点,因此让我们通过向所有三个添加偏移向量 V [1,-1] 来相应地调整点:

P1' = P1 + V = [0, 0]
P2' = P2 + V = [2, 0]
P3' = P3 + V = [0,-2]

注意:调整后的点由 '(素数)注释表示。

P2' 也必须位于 x 轴上。在这种情况下,它已经这样做了,因此无需进行任何调整。

我们假设每个球体的半径为 2。

现在我们有 3 个方程(给定)和 3 个未知数(交点中心的 X、Y、Z)。

求解 P4'x:

x = (r1^2 - r2^2 + d^2) / 2d  //(d,0) are coords of P2'
x = (2^2 - 2^2 + 2^2) / 2*2
x = 1

求解 P4'y:

y = (r1^2 - r3^2 + i^2 + j^2) / 2j - (i/j)x //(i,j) are coords of P3'
y = (2^2 - 2^2 + 0 + -2^2) / 2*-2 - 0
y = -1

对于 2D 问题忽略 z。

P4' = [1,-1]

现在我们通过减去偏移向量 V 转换回原始坐标空间:

P4 = P4' - V = [0,0]

解点 P4 正如预期的那样位于原点。

文章的后半部分描述了一种表示一组点的方法,其中 P1 不在原点或 P2 不在 x 轴上,因此它们符合这些约束。我更愿意将其视为一种翻译,但这两种方法都会产生相同的解决方案。

编辑:将 P2' 旋转到 x 轴

如果将 P1 平移到原点后 P2' 不在 x 轴上,我们必须对 View 执行旋转。

首先,让我们创建一些新的向量作为示例: P1 = [2,3] P2 = [3,4] P3 = [5,2]

请记住,我们必须先将 P1 平移到原点。与往常一样,偏移矢量 V 为 -P1。在这种情况下,V = [-2,-3]

P1' = P1 + V = [2,3] + [-2,-3] = [0, 0]
P2' = P2 + V = [3,4] + [-2,-3] = [1, 1]
P3' = P3 + V = [5,2] + [-2,-3] = [3,-1]

要确定旋转角度,我们必须找到 P2' 和 [1,0](x 轴)之间的角度。

我们可以使用 dot product平等:

A dot B = ||A|| ||B|| cos(theta)

当 B 为 [1,0] 时,这可以简化:点 B 始终只是 A 的 X 分量,并且 ||B|| (B 的大小)总是乘以 1,因此可以忽略。

我们现在有 Ax = ||A|| cos(theta),我们可以将其重新排列为我们的最终方程:

theta = acos(Ax / ||A||)

或者在我们的例子中:

theta = acos(P2'x / ||P2'||)

我们使用 ||A|| 计算 P2' 的大小= sqrt(Ax + Ay + Az)

||P2'|| = sqrt(1 + 1 + 0) = sqrt(2)

将其插入我们可以求解 theta

theta = acos(1 / sqrt(2)) = 45 degrees

现在让我们使用 rotation matrix将场景旋转 -45 度。 由于 P2'y 为正,并且旋转矩阵逆时针旋转,我们将使用负旋转将 P2 与 x 轴对齐(如果 P2'y 为负,则不要取反 theta)。

R(theta) = [cos(theta) -sin(theta)]
           [sin(theta)  cos(theta)]

  R(-45) = [cos(-45) -sin(-45)]
           [sin(-45)  cos(-45)]

我们将使用双素数符号“”来表示已平移和旋转的向量。

P1'' = [0,0] (no need to calculate this one)

P2'' = [1 cos(-45) - 1 sin(-45)] = [sqrt(2)] = [1.414]
       [1 sin(-45) + 1 cos(-45)] = [0]       = [0]

P3'' = [3 cos(-45) - (-1) sin(-45)] = [sqrt(2)]    = [ 1.414]
       [3 sin(-45) + (-1) cos(-45)] = [-2*sqrt(2)] = [-2.828]

现在您可以使用 P1''、P2'' 和 P3'' 求解 P4''。对 P4'' 应用反向旋转得到 P4',然后反向平移得到 P4,你的中心点。

要取消旋转,请将 P4'' 乘以 R(-theta),在本例中为 R(45)。要撤消平移,减去偏移向量 V,这与添加 P1 相同(假设您最初使用 -P1 作为 V)。

关于algorithm - 三边测量和定位点 (x,y,z),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176656/

相关文章:

iphone - 使用自定义字体将文本本地化为中文

c++ - C++ 中射线和矩形的交集

algorithm - 如何获得 4D 网格的 3D 横截面?

algorithm - 找到与所有弧线相交的最小射线数

php - 如何在php中实现字符串匹配的暴力算法?

java - 如何根据实例变量按升序对对象数组进行排序

r - 如何翻译包裹内容?

javascript - 使用 RSA 解密字符串

c# - WCF 服务器中的本地化

javascript - 如何在 Delaunay 三 Angular 剖分中仅标记每个三 Angular 形的一个顶点