我有一個點,並定義一個點。假設我也有一個polydata,它不包含或跨越這一點。如何找到polyData和沿某個方向的點之間的距離?
我想要找到從這點到polydata法線沿polydata的距離。就距離而言,我的意思是我應該翻譯多少點以便它「接觸」polydata定義的曲面。
這可能與vtk有關嗎?
我有一個點,並定義一個點。假設我也有一個polydata,它不包含或跨越這一點。如何找到polyData和沿某個方向的點之間的距離?
我想要找到從這點到polydata法線沿polydata的距離。就距離而言,我的意思是我應該翻譯多少點以便它「接觸」polydata定義的曲面。
這可能與vtk有關嗎?
首先我不熟悉vtk或任何引擎包。但你的第一個問題是純幾何問題。首先,您應該計算polydata所在的平面作爲該平面中的點(PlaneDefPoint)和平面法線(PlaneDefNormal)。 您可以通過計算從該平面上的三個點所獲得的兩個向量的叉積來計算它(在這種情況下,您的polydata爲三個點)。
* Point
PlaneDefNormal /
^/
|/
---------------*------------------- Plane
PlaneDefPoint
獲得平面定義後。將矢量計算到平面定義點(PlaneDefPoint)的點,並用平面法線(PlaneDefNormal)計算該矢量(圖中傾斜的一點)的點積。
您可以檢查與法線上計算的線段的交點。方法vtkCellLocator :: InteresectwithLine會給你交點。這種方法的問題在於,如果細分市場「太短」,您將無法滿足polydata。如果片段「太長」,則可以將polydata相交兩次,然後必須小心要檢索的交點。 對於更復雜的示例,它處理這種情況(通過使用vtkCellLocator :: FindCellsAlongLine),請參閱vtkSelectEnclosedPoints :: IsInsideSurface(http://fossies.org/dox/ParaView-v4.1.0-source/vtkSelectEnclosedPoints_8cxx_source.html)
的實現謝謝。我有一個類似的方法。我計算了這些法線方向上的點法線和生成線。我能夠通過使用OBB樹來檢測交點,並計算距離。無論如何,感謝您的建議。 – 2012-04-05 17:53:34
這種方法只適用於「扁平」polydata的表面,而不適用於表面當然一般的polydata – lib 2014-07-07 11:59:09
..在這裏假設2D表面,因爲既沒有明確詢問3D,也沒有問題的細節導致3D。 – 2014-07-07 14:30:32