2017-08-01 229 views
0

在我目前的問題中,我希望能夠檢測一個點是否在2D vtkUnstructuredGrid中。如何查找一個點是否在由VTK中2D非結構化網格定義的輪廓內?

我已經嘗試使用vtkSelectEnclosedPoints製作一個vtkGeometryFilter並在我的unstructuredGrid上使用它。但是,vtkSelectEnclosedPoints類旨在檢查點是否位於曲面內,而不是輪廓內。因此,當我嘗試在2D中應用它時,我發現我的點位於我的網格之外,即使我知道它們位於內部。這是因爲該課程固有地在3D中工作。 有沒有類似的類或方法可以用來檢測何時點在2D vtkUnstructuredGrid中?代碼能夠在打開它之前知道網格的尺寸(這是用戶輸入)。

回答

1

所以你的「輪廓」vtkUnstructuredGrid中的所有點形成一個單一的多邊形?在這種情況下,您可以使用vtkPolygon類,請參閱示例here。如果你的非結構化網格是多個多邊形,那麼我仍然會使用同樣的東西,只是遍歷所有的多邊形。

+0

我vtkUnstructuredGrid的輪廓中的所有點形成了一個奇怪的凹面幾何形狀,隨着我的軟件的每次運行而改變。由於這個幾何體是由許多可能隨時間變化的多邊形構成的,所以我不知道每次我如何重建這些多邊形? – BlaB

+0

PointInPolygon函數也適用於凹多邊形,所以這不是問題。如果像你說的幾何圖形是多個多邊形一樣,只需使用示例中的PointInPolygon函數測試所有多邊形,直到找到其中的一個點(或直到您測試所有多邊形,如果它不在其中任何一箇中)。如果這個解決方案不是你正在尋找的東西,也許一些截圖或代碼片段會更好地說明你的問題......如果你想測試的邊界不是一個(一組)多邊形,你想要測試的邊界如何? – tomj

0

您可以根據您的2D網格創建一個vtkModifiedBSPTree,並對要測試的點執行光線投射(IntersectWithLine)。我已經使用這個類作爲polydata三角形的地形模型,它非常快速和可靠。