c# - 计算节点的可能坐标

标签 c# algorithm nodes

这可能是一个奇怪的应用程序。 问题的简要描述是“如何根据相对位置(距离)获取节点的绝对坐标?”

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

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

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

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

最佳答案

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

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

这个简单的算法收敛性不好 - 误差在累积,远点的坐标可能不好。但是因为你有坐标整数,你可以在每次计数后修复坐标并使它们保持良好状态。

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

  • 比方说,您已经开始已知点 A、B、C。
  • 取 A 和它的一些相邻点 D。把它放在离 A 正确距离的地方。
  • 找到与 A 和 D 相邻的点 E。选择两个可能位置中的任意一个。
  • 从A、D、E开始,用I的方式。
  • 当你通过距离到达第二个起始已知点时,假设它是B,当然,它会在不好的地方。转动您围绕 A 构建的所有网络,以便 B 获得正确的坐标。继续循环。
  • 当你到达最后一个开始已知点 C 时,它会被设置为正确与否。如果不是,相对于 AB 轴镜像整个网络 - C 将被正确设置。 (如果不是,则您的数据有误)。继续我循环的方式直到结束。

如果所有点的列表很长,这两种方法都适用。如果点只给出很少的距离,任务就会变得非常非常复杂。

关于c# - 计算节点的可能坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34375769/

相关文章:

c# - 如何在C#应用程序中进行备份?

javascript - 自适应随机化算法

c - 不清楚汉诺塔的递归调用

algorithm - 如何使用回溯生成给定元素数组的所有组合?

selenium - 无法使用 Selenium Grid 访问虚拟机上的节点

c# - 从 Roslyn 中的行号获取节点

javascript - 如何在 WinRT C# 应用程序中执行 Javascript 代码?

c# - 获取返回的 JSON 字符串 C# 的值

algorithm - 如何改进对同一个图的多个最短路径搜索?

java - Java 中的节点使用哪种数据结构?