排序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}
我想要实现的是:
- 第一个是具有最低Y和X的元素
- 具有最低Y但X的元素仍然会变大
- 那么,当达到最高可能的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()
画这些点,我会得到一个闭合的多边形(在这种情况下是一个矩形(,没有相互交叉的线。
感谢您抽出时间
您想要的算法是Graham Scan。你可以在这里阅读:
http://en.wikipedia.org/wiki/Graham_scan
朱哈尔的评论是正确的;您将无法使用IComparable
执行此操作,因为这不是比较排序问题。为了使比较排序工作,您需要能够比较任意两个元素的相对大小。
一种更简单但更慢的算法是礼品包装算法:
http://en.wikipedia.org/wiki/Gift_wrapping_algorithm
仅供参考,您正在寻找的形状被称为凸包。这将在搜索算法时对您有所帮助。