メッシュ ライブラリの開発に取り組んでいます。点が 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 つのクワッド/多くのトリスによって共有されるため、複数回カウントされます。より良いアルゴリズムはありますか? この過大評価を避けるにはどうすればよいでしょうか?投影された点が面の頂点である可能性をスキップすると、適切な結果が得られません。