假設兩坐標 X1, X2,
if ( X1 > X2 ) {
qDebug() << "X1 > X2" ;
} else {
qDebug() << "X1 < X2";
}
qDebug() << "X1 > X2" ;
} else {
qDebug() << "X1 < X2";
}
而Nd(N>1)空間中坐標比對,也可利用這個模式,先將維度降為1D,在進行排序即可知道順序。範例:在2D空間共有4個坐標,分別為(1,1),(1,2),(,2,1),(2,2),希望可以從左到右,從上到下的排序。步驟如下:
- 第一步驟:先降維度
- 如果排序順序為由左到右,由上到下,公式:( X + 10000*Y)
- 如果排序順序為由上到下,由左到右,公式:( 10000*X + Y)
- 第二步驟:排序
Sample Code :
int array[][] = {{1,1},{1,2},{2,1},{2,2}};
QList<int> vals;
for (int i=0; i<array.length; i++ ) {
vals[i] = array[i][0] + 10000*array[i][1];
}
qSort(vals);
QList<int> vals;
for (int i=0; i<array.length; i++ ) {
vals[i] = array[i][0] + 10000*array[i][1];
}
qSort(vals);
Note :
該方法需注意,
1. 放大倍数参数一定要大于 X 或 Y 的最大值
2. Nd以上做法一樣,如3D公式如 X + 10000*Y + 10000000 * Z (注意別Overflow)
Reference :
[1] http://www.grasshopper3d.com/forum/topics/sorting-points-by-x-and-y
沒有留言:
張貼留言