0

メッシュ ライブラリの開発に取り組んでいます。点が 3D メッシュ内にあるかどうかを検出する機能を追加したいと考えています。

レイキャスティングアルゴリズムのようなものを試しました。

しかし、問題は、私のアルゴリズムでは、可能性をテストするために、Z 軸に沿って点を平面に投影します。 、顔を数えます。そうでない場合は数えません。合計数が奇数の場合、それは点が 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 つのクワッド/多くのトリスによって共有されるため、複数回カウントされます。より良いアルゴリズムはありますか? この過大評価を避けるにはどうすればよいでしょうか?投影された点が面の頂点である可能性をスキップすると、適切な結果が得られません。

4

1 に答える 1

0

この種の状況に対する通常のアプローチは、システム全体に小さな変換を適用することです(回転またはせん断変換のいずれか)。場合によっては(少なくとも2dでは)、変換の正確な量を知る必要さえありませんが、これを象徴的に行い、それに応じてアルゴリズムを調整することができます。

あなたの場合、私はおそらく最初にあなたの光線が頂点(またはこのヒットが少なくとも2回カウントされるので同じ問題を引き起こすエッジ)に当たるかどうかをチェックします。もしそうなら、私はあなたの投影の方向を少し変更して、もう一度テストを行います。投影方向を変更するには、おそらくアルゴリズムを大幅に変更する必要があるため、システムのすべてのポイントに(事前に計算された回転行列を使用して)小さな回転を適用することで、これを代替的に行うことができます。

于 2011-06-20T09:54:38.027 に答える