排序PointF数组

本文关键字:数组 PointF 排序 | 更新日期: 2023-09-27 18:00:56

有人能帮我创建一个算法、IComparer或某种方法来对PointF元素的数组或列表进行排序吗。假设我的数组中有以下PointF元素:

  • [0]{X=5.0Y=0.0}
  • [1] {X=100.0Y=10.0}
  • [2] {X=0.0 Y=100.0}
  • [3] {X=100.0Y=0.0}
  • [4] {X=0.0 Y=0.0}
  • [5] {X=100.0Y=50.00}
  • [6] {X=50.00Y=100.0}

我想要实现的是:

  • 第一个是具有最低YX的元素
  • 具有最低YX的元素仍然会变大
  • 那么,当达到最高可能的X时,在这个最低的Y中,它会去,所有元素都有这个X,但越来越大Y
  • 当达到顶部Y和顶部X时,它将从具有顶部1和顶端Y/strong>的元素变为仍然具有顶端Y

所以这个排序的数组看起来像这样:

  • [4] {X=0.0 Y=0.0}
  • [0]{X=5.0Y=0.0}
  • [3] {X=100.0Y=0.0}
  • [5] {X=100.0Y=50.00}
  • [1] {X=100.0Y=10.0}
  • [6] {X=50.00Y=100.0}
  • [2] {X=0.0 Y=100.0}

意思是,最后,如果我用Graphics.DrawPolygon()画这些点,我会得到一个闭合的多边形(在这种情况下是一个矩形(,没有相互交叉的线。

感谢您抽出时间

排序PointF数组

您想要的算法是Graham Scan。你可以在这里阅读:

http://en.wikipedia.org/wiki/Graham_scan

朱哈尔的评论是正确的;您将无法使用IComparable执行此操作,因为这不是比较排序问题。为了使比较排序工作,您需要能够比较任意两个元素的相对大小。

一种更简单但更慢的算法是礼品包装算法:

http://en.wikipedia.org/wiki/Gift_wrapping_algorithm

仅供参考,您正在寻找的形状被称为凸包。这将在搜索算法时对您有所帮助。