【发布时间】:2015-01-13 19:00:07
【问题描述】:
我有一个坐标列表,应该形成我需要排序的路径的边缘。我正在尝试使用 Grahams 扫描并尝试了以下几个样本:
这些代码在我拥有的几个测试用例中都失败了,我不确定出了什么问题。
编辑:
这些坐标应该是切线的一部分。如果坐标未排序,则切线会随机出现,而不是随着风暴的进行而可能是直的或弯曲的正确路径。
我正在创建形成风暴路径的圆圈的切线。可以在这里看到一个例子:
编辑#02
如果形成切线的点是有序的,那么正确的形状(忽略末尾的半圆)应该是这样的。
测试用例:
测试用例#01
[0]: {X = 11.581625 Y = -110.983437}
[1]: {X = 11.1816254 Y = -108.983437}
[2]: {X = 11.88781 Y = -113.115852}
[3]: {X = 11.587204 Y = -111.015938}
[4]: {X = 12.1884336 Y = -115.215759}
[5]: {X = 11.88781 Y = -113.115845}
[6]: {X = 12.5794077 Y = -116.863365}
[7]: {X = 12.1794081 Y = -115.163368}
[8]: {X = 13.0785418 Y = -118.855026}
[9]: {X = 12.5785418 Y = -116.855026}
[10]: {X = 13.534234 Y = -119.732178}
[11]: {X = 13.034234 Y = -118.732178}
测试用例#02
[0]: {X = 10.4182844 Y = -111.21611} [1]: {X = 10.0190592 Y = -109.21595} [2]: {X = 10.712142 Y = -113.283806} [3]: {X = 10.4127483 Y = -111.183716} [4]: {X = 11.0115175 Y = -115.383896} [5]: {X = 10.712141 Y = -113.2838} [6]: {X = 11.4204569 Y = -117.136063} [7]: {X = 11.0213022 Y = -115.435867} [8]: {X = 11.9213 Y = -119.144341} [9]: {X = 11.4223957 Y = -117.144066} [10]: {X = 12.4652023 Y = -120.266693} [11]: {X = 11.9662571 Y = -119.266167}
测试用例#03
[0]: {X = 10.6 Y = -109.1} [1]: {X = 11.0 Y = -111.1} [2]: {X = 11.3 Y = -113.2} [3]: {X = 11.6 Y = -115.3} [4]: {X = 12.0 Y = -117.0} [5]: {X = 12.5 Y = -119.0} [6]: {X = 13.0 Y = -120.0}
请指导我一个资源、算法或代码,我可以在其中找到可靠的浮点坐标排序算法,并且在执行此操作时不会消除点。速度不是第一要务,准确性是优先考虑的。
我将不胜感激所有投入。谢谢
【问题讨论】:
-
你能给我们展示一下这些数据的样子吗?还有,形状是凸的吗?
-
添加了截图和一些相关细节。
-
每个数据集中有一个或两个轨道吗?
-
在这种情况下,假设轨道不会自行循环,我想只要从一个点到另一个点选择最近的一个就可以了。
-
我不明白你要解决的问题与凸包有什么关系。
标签: c# sorting floating-point coordinates grahams-scan