簡體   English   中英

驗證體積/ 3D空間中的點

[英]Verification of a Point in a Volume/ 3D space

我一直在致力於網格物體庫的開發,我想添加一個功能,使其可以檢測點是否位於3D網格物體內部。

我已經嘗試過類似射線鑄造算法的東西。

但是問題是,在我的算法中,為了測試這種可能性,我將點沿Z軸投影到平面上。如果投影點在quad / tri內,並且投影點的z值大於原始點的Z值,我將計算人臉。如果不是,我將不計算。如果總計數為ODD,則表示該點在3D體積內。

ispointinside3Dspace(point,facelist)
{
for faces in the object:
{
  project the point onto the face along Z axis;
  if( projected point is within the face):
  {
        if( projectedpoint->z > point->z ):
        {
           face_hit++;
        }
   }
}
if(face_hit%2==1)
{
   return(1);
}
else
{
   return(0);
}
}

如果該算法中的投影點等於該面上的頂點,則將不止一次計數,因為同一頂點將被4個quad /許多tris共享。是否有更好的算法。 我應該如何避免這種過度計算?如果我忽略投影點是面上頂點的可能性,我將無法獲得正確的結果。

對於這種情況,通常的方法是對整個系統應用較小的變換(旋轉或剪切變換)。 在某些情況下(至少在2d中),您甚至不需要知道變換的確切數量,但是可以象征性地進行此操作並相應地調整算法。

在您的情況下,我可能首先會檢查您的射線是否擊中了頂點(或邊緣),因為同樣的問題,該命中至少會被計算兩次,所以會出現相同的問題。 如果是這樣,我會少量修改您的投影方向,然后再次進行測試。 由於更改投影方向可能需要對算法進行重大更改,因此您可以通過對系統的所有點進行較小的旋轉(使用預先計算的旋轉矩陣)來進行替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM