簡體   English   中英

排序PointF數組

[英]sorting PointF array

任何人都可以幫助我創建算法,IComparer或某種對PointF元素的數組或列表進行排序的方法。 可以說我在數組中跟隨了PointF元素:

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

我想要實現的是:

  • 首先是YX最低的元素
  • 仍然具有最低YX會變大的元素
  • 然后作為在這個最低Y得到的最高可能X得到它,所有元素都有這個X ,但是Y越來越大
  • 隨着獲得最高的Y和最高的X ,它將從具有最高的X和最高的Y的元素變為仍然具有最高的YX越來越低的元素

所以這個排序的數組看起來像這樣:

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

意思是,最后,如果我要使用Graphics.DrawPolygon()繪制這些點,我會得到一個閉合的多邊形(在這種情況下是一個矩形),沒有相互交叉的線。

感謝您的時間

您想要的算法是Graham Scan。 你可以在這里讀到它:

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

juharr的評論是正確的; 你無法用IComparable做到這一點,因為這不是一個比較排序問題 要使比較排序起作用,您需要能夠比較任何兩個元素的相對大小。

較容易但較慢的算法是禮物包裝算法:

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

僅供參考,您正在尋找的形狀稱為凸殼 這將在搜索算法時為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM