计算节点的可能坐标

时间:2015-12-19 21:51:47

标签: c# algorithm nodes

这可能是一个奇怪的应用程序。 问题的简要描述是"如何根据相对位置(距离)得到节点的绝对协调?"

我们有许多节点(每个节点都有一个唯一的ID)和一个列表,指定其相邻节点以及每个节点的距离作为输入。

所需的输出是在2D Surface上布置这些节点的一种可能方式。

结果算法将在C#中使用......因此外部.net库也可能有所帮助。

如果你能告诉我一个方法,那将是一个很大的帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您必须在开始时拥有至少三个已知点的坐标。

方式I.如果已知点相邻,则过程很简单 - 您循环所有点,寻找这样的点,在列表中有三个已知点。使用其中两个计算两个可能的位置,然后使用第三个选择右侧或左侧变体。重复循环,直到循环期间没有新点。

这个简单的算法收敛性差 - 误差累积,远点可能有不好的坐标。但是,由于你有坐标整数,你可以在每次计数后修复坐标并让它们变好。

方式II。如果已知点彼此不相邻,则该过程更复杂。

  • 比方说,你已经开始知道A,B,C点。
  • 将A和一些相邻的点D放在距离A的正确距离处。
  • 找到与A和D相邻的点E.选择两个可能位置中的任何一个。
  • 从A,D,E开始,使用方式I.
  • 当你到达第二个开始已知点的距离时,让它为B,当然,它将在不好的地方。转动你围绕A建造的所有网,这样B就会得到正确的坐标。继续循环。
  • 当您到达最后一个起始已知点C时,它将被设置正确与否。如果没有,镜像整个网络相对AB轴 - C将正确设置。 (如果没有,你的数据不好)。继续循环直到结束的方式。

如果您有所有积分的长列表,这两种方式都有效。如果点只有很少的距离,那么任务变得更加复杂。