我有一個在三維空間百萬點的集合。空間排序百萬點在三維空間
各點是一個對象
Struct Point
{
double x;
double y;
double z;
};
的萬點被存儲在一些隨機順序的C++矢量MyPoints內部。
我想根據空間中的點的空間分佈對這些百萬點進行排序,使得在排序後我的數組內的物理距離更近的點也應該更接近。
我就怎麼做,這是如下第一個猜測:第一次分揀點相對於z軸,然後進行排序沿Y軸點,然後現在首先梳理沿X軸
MyPointsSortedAlongZ = Sort(MyPoints, AlongZAxis)
MyPointsSortedAlongY = Sort(MyPointsSortedAlongZ , AlongYAxis )
MyPointsSortedAlongX = Sort(MyPointsSortedAlongY , AlongYAxis )
點,我不知道這種方法是否正確。我的最終排列點MyPointsSortedAlongX是否在空間上完全排序(或在空間上幾乎排序)?其次,如果這種方法是正確的,那麼這是否是最快的方法呢?什麼是更好的方法來做到這一點?
沒有辦法做到這一點,並獲得空間距離到線性(1D陣列)距離的完美映射,因爲您正在降低維度。您可能對[*空間填充曲線*](http://en.wikipedia.org/wiki/Space_filling_curve)感興趣,以此作爲實現此目的的手段。 –
另一種方法是將空間分解爲3d數組,並在每個單元格中存儲該單元格中的點或對它們的引用。就我個人而言,我喜歡@OliCharlesworth的建議,即更好地使用空間填充曲線,但編程起來可能非常棘手。 –
我沒有提到我的帖子中的空間填充曲線,雖然我知道它。我在考慮是否構建一個Barnes-Hut樹,然後按順序遍歷該樹可以導致空間排序(但也許我錯了)。 – nurabha