2014-10-19 155 views
0

我想確定一個點是在從STereoLithography(.stl)文件導入的多面體內部。我想知道是否有已經存在的C++解決方案/庫來解決這個問題。如何判斷一個給定的點是否在STereoLithography(.stl)文件對象中?C++

我期待,以避免炮擊問題的Matlab solution

+2

「在stl對象內部」?你的意思是說你有一個'std :: vector'包含點,形成一個多面體,並且你想知道一個點是否在多面體的內部或外部?在標準C++中沒有這樣做的功能,但我確定有可用的幾何包可以做這樣的事情。或者可以寫一小段代碼來確定這樣的事情...... – 2014-10-19 21:50:28

+0

一個stl文件將包含點和它們的正常向量是。 – 2014-10-19 22:19:36

+0

具有法線應該從身體內部指向外部的屬性(計算法線向外) – 2014-10-19 22:26:24

回答

0

的理論是有點簡單,當你從一個點到外面去,你將不得不通過奇數的飾面(三角形)。

一些僞代碼

Vector3d toOutside { point, pointOutside }; // !!! how do we know a point is outside ?!? 
for_each(triangleList, [&count, =toOutside](Triangle& triangle) { 
    if (Intersect(triangle, toOutside) // some fussiness with edges and triangle points. 
     ++count; 
} 

if (count %2 == 1) 
    isInside = true; 
else 
    isOutside = false; 

尋找多面體外的點,找到最高的x,y,z和添加1.0給他們。

僞教授[TODO:鏈接到物品與更剛性的教授]
簡單情況下的盒子,如果我們在一個盒子裏,將有一個交叉點與側如果我們按照toOutside矢量。 如果我們在一個多面體內,那麼如果我們通過一個三角形,我們在外面,如果我們再通過兩個三角形(進出),我們仍然可以告訴我們在裏面。如果我們事實上是在多面體之外,那麼我們將通過,甚至在跟隨外部向量時也會通過多個三角形(或零)。

對於.h和.inl文件,在geometrictools下的C++實現在數學 - >包含 - >點 - 多面體 - > 3D下查找。

可能會有一些更優化的測試使用法向量作爲外部參數。
此外,如果您有多個對象需要測試,請考慮爲每個對象使用邊界框進行剔除,因爲矢量測試可能很昂貴。

相關問題