3章 立体モデルの干渉処理

PUNI.BAS/PUZZLE.BAS

3.1 干渉計算のアルゴリズム

目次へ戻る次のページ

二つの立体図形の干渉(interference)処理とは、二つの図形AとBとについて、代数的には、和(A+B)、差(A−B)、積(A*B)になるように新しい図形を作ることです。平面図形については、この干渉処理はベン図(Venn diagram)として知られている論理的な演算を表わします。GEOMAPでは、この演算を立体的な図形処理に応用したものです。和・差・積は、論理演算では、GEOMAPのコマンド名では、PUNI, PSUB, PINTとして準備されています。

コマンド 演   算 論理式
PUNI 二つのモデルを一体化して一つのモデルに合成する A or B
PSUB モデルAからモデルBを引き算するように演算する not(notA or B)
PINT 二つのモデルの共通部分を取り出すように演算する not(notA or notB)

 二つの図形の干渉処理では、二つの図形が互いに交わるような位置関係になければ生じません。二つのモデルが離れているとき、PUNIでは単純に足しあわせます。PSUBではモデルBを消去します。PINTはAもBも消去します。干渉するかしないかを単にテストするだけのコマンドは PATEST です。干渉処理のアルゴリズムを簡単に説明しておきます。まず、与えられた立体図形を丁度包み込むような、各面が座標面に平行になる箱(box) を最初に求めます。干渉の可能性があるのは、二つの箱に重複する部分(積の6面体)があるときです。次に多面体を構成する多角形状の各面について、その多角形を構成する頂点を包み込む箱の寸法を求めます。これと、積の6面体との干渉が生じなければ、この面は面同士の交差の判定から省きます。ここまでが予備的な判定です。多面体の面同士が交わって始めて、実際の干渉が生じます。互いに相手同士で、辺と面との交差を探索します。辺と面との交差は、辺の両端の頂点が面の裏と表とにあって、さらに、面の多角形の内側を通るときです。交差が生じたら、新しい頂点を作り、交差した辺を二つの辺に分割します。相手側の立体の内側に入る面、辺、頂点は後で消去します。また、二つの面が交差すれば、新しい辺ができて、交差する二つの面をつなぎます。

 立体図形の干渉処理を行なうとき、立体図形は便宜的に風船のようなサーフェースモデルとして扱います。裏返しになったサーフェースモデルは、立体図形では内部が空洞になっている状態をあらわします。この節の最初に、論理演算に notの演算式を示してありますが、これがサーフェースモデルを裏返しにする処理に当たります。立体を裏返しにすると、内部にある空洞が、実のある立体として得られます。そのコマンドは PEVERT として用意されています。サーフェースモデルにした立体モデルを干渉処理して、新しい連続したサーフェースモデルを作ると、接続のはんぱな切れ端ができますので、これらを省いて新しい立体を完成させます。

 干渉処理では、モデルは独立した二つ以上のモデルの集合になっていることがあります。これを分離して独立にするコマンドはPDCOMPです。これはスタックに同じ名前で順に登録されますので、同じ名前があると、いつも最初に見つかった名前のモデルだけが参照されます。そこでスタック名を調べるコマンドCDIRで名前を確認し、CRENAMで別の名前に付け替えるようにします。


次のページ