使用背景
在機(jī)器視覺項(xiàng)目中,要對一組視覺坐標(biāo)(x,y)經(jīng)行排序,如N點(diǎn)標(biāo)定的時(shí)候。如下圖:

我們需要對圖是黑色圓點(diǎn)的中心坐標(biāo)進(jìn)行:先按x升序排序,再按y經(jīng)行降序排序。經(jīng)過兩輪排序后,我們將會(huì)得到一組有序的坐標(biāo)點(diǎn)集。
如何使用
關(guān)鍵代碼如下:
class VistionPosition
? ? {
? ? ? ? public VistionPosition(double _x, double _y)
? ? ? ? {
? ? ? ? ? ? x = _x;
? ? ? ? ? ? y = _y;
? ? ? ? }
? ? ? ? public double x { get; set; }
? ? ? ? public double y { get; set; }
? ? }
List<VistionPosition> lst = new List<VistionPosition>();
lst.Sort((a,b)=>a.y.CompareTo(b.y));//對lst進(jìn)行y升序的排序,關(guān)鍵的表達(dá)式(a,b)
for (int i = 0; i < 3; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < 3; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? var temp = lst.Take(3).OrderBy(a=>a.x).ToList();//返回前三個(gè)元素,按y
? ? ? ? ? ? ? ? ? ? lst = lst.Skip(3).ToList();
? ? ? ? ? ? ? ? ? ? resultList.AddRange(temp);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
總結(jié)
該排序算法可以用于激光標(biāo)定中的N點(diǎn)標(biāo)定,可以做到一鍵標(biāo)定。