1

我是这个论坛的新手,不是以英语为母语的人,所以请善待!:)

这是我目前面临的挑战:我想根据 2 点之间的一组给定距离计算 3D 欧几里得空间中未知点的(近似)相对坐标。在我的第一种方法中,我想忽略可能的多个解决方案,只是随机选择第一个。

例如:给定一组距离:(我认为它创建了一个以直角三角形为基础的金字塔)

P1-P2-距离

  • 1-2-30
  • 2-3-40
  • 1-3-50
  • 1-4-60
  • 2-4-60
  • 3-4-60

Step1: 现在,我如何计算这些点的相对坐标?
我认为第一个点是 0,0,0,所以第二个点是 30,0,0。
之后,可以通过找到从点 1 和 2 到点 3 的距离(分别为 50 和 40)的 2 个圆的交点来计算第三个点。我如何在数学上做到这一点?(尽管我用这些简单的数字来简单地表示我脑海中的情况)。此外,我不知道如何以正确的数学方式得到答案,第三点是 30,40,0(或 30,0,40,但我会忽略它)。
但获得第四点并不那么容易。我以为我必须使用 3 个球体来计算交叉点才能得到这一点,但我该怎么做呢?

Step2: 在我弄清楚如何计算这个“简单”示例之后,我想使用更多未知点......对于每个点,到另一个点的最小距离为 1 以将其“链接”到其他点。如果由于其自由度而无法计算坐标,我想忽略除我随机选择的一种可能性之外的所有可能性,但相对于已知距离。

Step3: 现在最后阶段应该是这样的:由于现实生活情况,每个测量的距离都有点不正确。因此,如果给定一对点的距离超过 1 个,则对距离进行平均。但由于距离不精确,在确定点的准确(相对)位置时可能会遇到困难。所以我想将不同的可能位置平均到“最佳”位置。

你能帮我一步一步完成我的挑战吗?

4

3 回答 3

1

您需要使用三角函数 - 特别是“余弦规则”。这将为您提供三角形的角度,从而让您解决​​第 3 点和第 4 点。

规则指出

c^2 = a^2 + b^2 - 2abCosC

其中 a、b 和 c 是边的长度,C 是对边 c 的角度。

在您的情况下,我们需要 1-2 和 1-3 之间的角度 - 两条线在 (0,0,0) 处相交的角度。它将是 90 度,因为您有 3-4-5 三角形,但让我们证明:

50^2 = 30^2 + 40^2 - 2*30*40*CosC
CosC = 0
C = 90 degrees

这是线 (0,0,0)-(30,0,0) 和 (0,0,0)- 点 3 之间的角度;沿着这条线延伸边 1-3 的长度(即 50),您将得到第二个点 (0,50,0)。

找到你的第四点有点棘手。我能想到的最直接的算法是首先找到点的 (x,y) 分量,然后使用 Pythagoras 的 z 分量从那里直接找到。

考虑到 (x,y,0) 平面上有一个点直接位于点 4 的“下方” - 将此点称为 5。您现在可以创建 3 个直角三角形 1-5-4、2-5- 4 和 3-5-4。

您知道 1-4、2-4 和 3-4 的长度。因为这些是直角三角形,所以比率1-4 : 2-4 : 3-4等于1-5 : 2-5 : 3-5。使用三角法找到点 5 - “正弦规则”将为您提供 1-2 和 1-4、2-1 和 2-4 等之间的角度。

“正弦规则”指出(在直角三角形中)

a / SinA = b / SinB = c / SinC

所以对于三角形 1-2-4,虽然你不知道长度 1-4 和 2-4,但你知道比率1-4 : 2-4。同样,您知道比率2-4 : 3-41-4 : 3-4其他三角形。

我会让你解决第 4 点。一旦你有了这一点,你可以使用 pythagoras' 轻松解决 4 的 z 分量 - 你将有边 1-4、1-5 和长度 4-5 将是z 分量。

于 2011-02-11T00:37:44.517 回答
1

我最初假设您知道所有点对之间的距离。

正如您所说,您可以选择一个点 ( ) 作为原点,沿 x 轴A定向第二个点 ( ),并沿 xy 平面放置第三个点 ( )。您可以按如下方式求解 C 的坐标:BC

given: distances ab, ac, bc
assume
A = (0,0)
B = (ab,0)
C = (x,y)  <- solve for x and y, where:
  ac^2 = (A-C)^2 = (0-x)^2 + (0-y)^2 = x^2 + y^2
  bc^2 = (B-C)^2 = (ab-x)^2 + (0-y)^2 = ab^2 - 2*ab*x + x^2 + y^2

-> bc^2 - ac^2 = ab^2 - 2*ab*x
-> x = (ab^2 + ac^2 - bc^2)/2*ab
-> y = +/- sqrt(ac^2 - x^2)

为了使其准确工作,您需要避免点{A,B,C}在直线上或接近直线的情况。

求解 3 空间中的附加点是类似的——您可以展开距离的毕达哥拉斯公式,取消二次元素,并求解得到的线性系统。但是,这并不能直接帮助您完成第 2 步和第 3 步……

不幸的是,我也不知道第 2 步和第 3 步的行为良好的精确解决方案。您的整体问题通常会受到过度约束(由于冲突的噪声距离)和约束不足(由于缺少距离)。

您可以尝试迭代求解器:从所有点的随机放置开始,将当前距离与给定距离进行比较,然后使用它来调整您的点以改善匹配。这是一种优化技术,所以我会查找有关数值优化的书籍。

于 2011-02-14T04:10:08.913 回答
0

如果您知道节点之间的距离(系统的固定部分)和到标签的距离(移动设备),您可以使用三边测量来找到 x,y 位置。

我使用具有测距功能的 Nanotron 无线电模块完成了这项工作。

于 2011-02-13T10:08:03.613 回答