- ベストアンサー
三角形の交線はどうやって計算するのでしょうか?
多面体の重なりについて計算したいのですが,検索すると三角形に分割した後に三角形の重なりを計算すれば良い……と言う記事を複数発見しました. しかし,どのようにすれば三角形の交わりを求められるのかが見つかりません. (手元の参考書には,3点を通る平面と直線の交わりなどは書いてあるのですが……) ・三角形同士の交線の計算 ・三角形と四角形の交線の計算 の以上2点に関する資料を,何方か御教示願えませんでしょうか. 以上です 宜しくお願いします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>(手元の参考書には,3点を通る平面と直線の交わりなどは書いてあるのですが……) >・三角形同士の交線の計算 「三角形ABCと三角形abcが交わる」 とは 「三角形ABCと直線abが交わる または 三角形ABCと直線acが交わる または 三角形ABCと直線bcが交わる」 と言う事。 考え方を変えれば 「三点ABCを通る平面と直線abが交わる または 三点ABCを通る平面と直線acが交わる または 三点ABCを通る平面と直線bcが交わる」 かつ 「三点abcを通る平面と直線ABが交わる または 三点abcを通る平面と直線ACが交わる または 三点abcを通る平面と直線BCが交わる」 と言う事。 なので、手元の参考書の「3点を通る平面と直線の交わり」が判定できれば良い。 >・三角形と四角形の交線の計算 「三角形ABCと四角形abcdが交わる」 とは 「三角形ABCと、三角形abcまたは三角形acdが交わる」 と言う事。 なので「三角形同士の重なり」の計算を2回行うだけ。 簡単に言うと「どんな多角形も、分割すれば三角形の集まり」なので「三角形同士の交線の計算」を行うだけになる。 そして「多面体同士の重なり」は「互いの表面を三角形に分解した時、三角形同士が重なっているかどうか」で判定出来ます。 なお、三角形に分解した時、すべての三角形について、3つの頂点座標を調べ 「X座標の最大が、もう一方の多面体のX座標の最小よりも小さい」 かつ 「Y座標の最大が、もう一方の多面体のY座標の最小よりも小さい」 かつ 「Z座標の最大が、もう一方の多面体のZ座標の最小よりも小さい」 と言う場合は重ならないのが明らかなので、その三角形を除外できます。 除外は、以下のようにします。 2つの多面体について、その多面体がスッポリぴったり入る直方体を作って、その2つの直方体が重なった領域を求めます。 その領域は8つの頂点を持つ直方体で、その頂点座標は「どっちかの多面体の頂点座標の、X、Y、Z座標の最小値か最大値」で出来ています。 なので、この直方体を求めるには「多面体の各頂点の座標のX、Y、Z座標を大小比較するだけ」で求まります。 この時「2つの直方体が重なった領域がない」のなら、多面体は重なっていません。 次に「2つの直方体が重なった領域の中にない三角形」は、重なりようが無いので、すべて除外します。 どちらの多面体でも、最低1個は三角形が残りますから、あとは前述の方法で「三角形同士の重なり」を計算すれば良いです。