我想確定一個點是在從STereoLithography(.stl)文件導入的多面體內部。我想知道是否有已經存在的C++解決方案/庫來解決這個問題。如何判斷一個給定的點是否在STereoLithography(.stl)文件對象中?C++
我期待,以避免炮擊問題的Matlab solution
我想確定一個點是在從STereoLithography(.stl)文件導入的多面體內部。我想知道是否有已經存在的C++解決方案/庫來解決這個問題。如何判斷一個給定的點是否在STereoLithography(.stl)文件對象中?C++
我期待,以避免炮擊問題的Matlab solution
的理論是有點簡單,當你從一個點到外面去,你將不得不通過奇數的飾面(三角形)。
一些僞代碼
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下查找。
可能會有一些更優化的測試使用法向量作爲外部參數。
此外,如果您有多個對象需要測試,請考慮爲每個對象使用邊界框進行剔除,因爲矢量測試可能很昂貴。
「在stl對象內部」?你的意思是說你有一個'std :: vector'包含點,形成一個多面體,並且你想知道一個點是否在多面體的內部或外部?在標準C++中沒有這樣做的功能,但我確定有可用的幾何包可以做這樣的事情。或者可以寫一小段代碼來確定這樣的事情...... – 2014-10-19 21:50:28
一個stl文件將包含點和它們的正常向量是。 – 2014-10-19 22:19:36
具有法線應該從身體內部指向外部的屬性(計算法線向外) – 2014-10-19 22:26:24