修改凸包以排除不需要的点

时间:2009-10-20 09:49:56

标签: c# algorithm geometry

在我的C#-Silverlight 3程序中,我有一组积分。这些点可以是不同的颜色,绿色,红色或蓝色。然后我为不同的点创建一个凸包:一个绿色的船体,一个红色的船体和一个蓝色的船体。现在可能发生,每种颜色的船体内都是来自另一种颜色的点,如绿色船体内的红点。

是否有任何算法来修改船体,以便那些其他颜色的点将被排除在船体之外(此时不再是凸起的)?

提前致谢, 弗兰克

1 个答案:

答案 0 :(得分:0)

转换为经典旅行商问题。

使用生成此外壳的点并添加您希望它们排除的其他点。 现在找到这一点上的最佳路径,你就拥有了这个新的船体

修改

我们需要在点上找到一条非交叉路径。

  1. 在中间找到一个点(例如,算术中心)
  2. 计算每个点的角度(使用函数atan2)
  3. 按角度对此点进行排序。
  4. 复杂性现在是N * log(N)