仅用距离矩阵放置点

时间:2017-03-28 07:05:21

标签: algorithm plot data-visualization

我想要显示某些点,但只给出了它们的距离矩阵。有一种很好的方法可以让一种方法将它们放在2D空间上。

输入:距离矩阵

输出:这些点的坐标

1 个答案:

答案 0 :(得分:2)

对于给定的矩阵,如果你想出一个可能的位置,那么点的任何平移也将满足矩阵,任何旋转和镜像也是如此。

对于一个可能的展示位置:

从矩阵中选择3个点A B C(即矩阵的3行),形成一个三角形,距离为AB,AC和BC。这些点不能全部位于一条线上,所以AB!= AC + BC,AC!= AB + BC和BC!= AB + AC。

将A放在原点,将B放在(AB,0)处。然后使用余弦规则推导出AB和AC线之间的角度:

angle = arccos((AB 2 + AC 2 - BC 2 )/(2 * AB * AC))

现在您有角度可以计算C的位置:

C =(cos(角度)* AC,sin(角度)* AC);

您现在拥有AB和C的位置。您可以遍历矩阵中与其他点对应的每个其他行,并找到每个点与AB和C之间的距离。然后您可以使用此公式来工作根据您假设的ABC位置以及每个点的距离来确定点的位置:

Finding location of a point on 2D plane, given the distances to three other know points

因此,您实际上只需要矩阵每行的3个值。对于大型矩阵,大部分都是完全冗余的。如果您尝试最小化存储空间,这可能对您有所帮助。

请记住,任何翻译,旋转和镜像也是有效的。