我想可视化一些点,但只给出它们的距离矩阵有没有什么好的方法可以得到一种可能的方法来把它们放在二维空间。
输入:距离矩阵
Ouput:这些点的坐标
最佳答案
对于给定的矩阵,如果你提出了一个可能的位置,那么点的任何平移也将满足矩阵的要求,任何旋转和镜像也将满足矩阵的要求。
对于一个可能的位置:
选择3个点a b c(即矩阵中的3行)组成三角形,距离ab、ac和bc取自矩阵。点不可能都在一条线上,所以AB!=AC+BC,AC!=AB+BC和BC!=AB+AC。
把a放在原点,b放在(ab,0)。然后使用余弦规则推导AB线和AC线之间的角度:
角度=arccos((ab2+ac2-bc2)/(2*ab*ac))
既然有了角度,就可以计算c的位置:
C=(cos(角)*AC,sin(角)*AC;
现在有了A B和C的位置。您可以遍历矩阵中与其他点相对应的其他行,并找到每个点与A B和C之间的距离。然后,您可以使用此公式根据您假设的A B C位置和点到每个点的距离计算出点的位置:
Finding location of a point on 2D plane, given the distances to three other know points
所以,实际上,矩阵的每一行只需要3个值对于一个大矩阵,大部分是完全冗余的如果您试图最小化存储空间,这可能会对您有所帮助。
记住,任何平移、旋转和镜像都是有效的。
关于algorithm - 仅具有距离矩阵的放置点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43062756/