一個標準的簡化將首先計算使用軸近似八叉樹四面體十字路口對齊的邊界框。由此產生的相交測試非常簡單。
然後,一旦遍歷樹的葉級,可以使用精確測試來確定給定四面體中包含哪些點。
總結:
Form an octree T for your points X
for (all tetrahedrons ti in mesh M)
Form a minimal axis-aligned bounding-box Bi for tetrahedron ti
Traverse T from root, accumulating a list Li of all leaf nodes
that overlap with box Bi
for (all leaf nodes li in list L)
for (all points pi in leaf node li)
if (point pi is inside tetrahedron ti /*exact test*/)
Associate point pi with tetrahedron ti
endif
endfor
endfor
endfor
此算法是有效的,如果:(i)
在M
點X
被網狀M
內均勻分佈,並且(ii)
四面體有合理的長寬比。
實現良好性能的關鍵是確保樹遍歷步驟儘可能高效地實現。
可以通過檢查給定點pi
是否位於四面體的4個面的「內」側來完成四面體中點測試。如果給定四面體[i,j,k,l]
,則點pi
位於面[i,j,k]
的「內」側,如果它位於與「相反」頂點l
平面[i,j,k]
相同的一側。
這些定向測試可以使用自適應精度算法來穩健執行。 Jonathan Shewchuk提供了這樣的實現here。