私は自分のプロジェクトにCGALを使用しています。メッシュ ファイル (.off) から AABB ツリーを作成します。最初にメッシュから多面体を抽出し、次に三角形を取得し、最後にそれらをツリーに挿入します。これはすべてスムーズに進みました。
問題は、ツリーのdo_intersect関数を使用する場合です。A と B の 2 つの点が与えられた場合、2 つの点を結ぶ線または線分が何かと交差するかどうかを知りたいと思います。
ほとんどの場合、これは適切に機能しますが、浮動小数点エラーが発生することがあります。「ときどき」とは、ポイントのサブセットが非常に少ないことを意味します。
これには理由がありますか?
ここに私のコードのスニペットがあります:
glm::vec3 pointA, pointB; // assume this are filled with some values
// the elements inside points above are floats.
Point_3 pA(pointA.x, pointA.y, pointA.z);
Point_3 pB(pointB.x, pointB.y, pointB.z);
Segment segment_query(pA, pB);
my_tree->do_intersect(segment_query); // here sometimes crashes
誰かが尋ねる前に、pointBはメッシュの表面上の特定のポイントであり、ほとんどのポイントで問題が発生しないため、エラーはそれに関連していないと思います。代わりに、 pointAは空間のどこかにあります。
回答ありがとうございます。