(57)【特許請求の範囲】
【請求項１】
凸多面体間の最接近点を連続的に探索することにより両者の干渉チェックを行なう最接近点探索方装置において、
凸多面体を覆う全ポリゴンの頂点座標を入力する手段、
各ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを作成する近接点線形リスト作成手段、
最新に求まっている最接近点に近接する頂点を前記近接点線形リストより求める近接頂点取得部、
前記求まった頂点の中より次の時刻における最接近点を探索して干渉チェックを行なう最接近点探索手段、
を有することを特徴とする最接近点探索装置。
【請求項２】
第１、第２の非凸多面体をそれぞれ凸多面体に分解し、凸多面体間の最接近点を連続的に探索することにより非凸多面体間の干渉チェックを行なう最接近点探索装置において、
前記凸多面体毎に、該凸多面体を覆う全ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを作成する近接点線形リスト作成手段、
前記非凸多面体毎に、該非凸多面体の頂点座標値のうち、各軸方向の最大座標値及び最小座標値を求め、該最大座標値及び最小座標値により該非凸多面体を包む包絡球を生成する包絡球生成手段、
第１、第２の非凸多面体の包絡球が干渉するかチェックするチェック手段、
干渉した後は前記非凸多面体を分解して得られている凸多面体間の最接近点を探索し、最新に求まっている最接近点に近接する頂点を前記近接点線形リストより求め、これら頂点の中より次の時刻における最接近点を探索する最接近点探索手段、
各凸多面体間の最接近点間距離が最も短いものを用いて干渉チェックを行なう干渉チェック部、
を有することを特徴とする最接近点探索装置。
【請求項３】
前記各非凸多面体を包む最小の凸多面体（凸包）を生成する凸包生成部、
を備え、前記チェック手段は、第１第２の非凸多面体の包絡球が干渉した後は、第１、第２の非凸多面体の凸包が干渉するかチェックし、前記最接近点探索手段は、第１、第２の凸包同士が干渉した後は、前記非凸多面体を分解して得られている凸多面体間の最接近点を探索し、干渉チェック部は各凸多面体間の最接近点間距離が最も短いものを用いて干渉チェックを行なうことを特徴とする請求項２記載の最接近点探索装置。
【請求項４】
第１、第２の非凸多面体をそれぞれ凸多面体に分解し、凸多面体間の最接近点を連続的に探索することにより非凸多面体間の干渉チェックを行なう最接近点探索装置において、
前記凸多面体毎に、該凸多面体を覆う全ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを作成する近接点線形リスト作成手段、
前記各非凸多面体を包む最小の凸多面体（凸包）を生成する凸包生成手段、
第１、第２の非凸多面体の凸包が干渉するかチェックするチェック手段、
干渉した後は凸多面体間の最接近点を探索し、最新に求まっている最接近点に近接する頂点を前記近接点線形リストより求め、これら頂点の中より次の時刻における最接近点を探索する最接近点探索手段、
各凸多面体間の最接近点間距離が最も短いものを用いて干渉チェックを行なう干渉チェック部、
を有することを特徴とする最接近点探索装置。
【請求項５】
前記チェック手段は凸包同士が干渉した後は、一方の凸包を解除し、非凸多面体を分解して得られている各凸多面体と他方の凸包の干渉チェックを行ない、前記最接近点探索手段は、凸多面体と他方の凸包が干渉した後は、他方の凸包を解除し、各非凸多面体を分解して得られている凸多面体間の最接近点を探索し、干渉チェック部は各凸多面体間の最接近点間距離が最も短いものを用いて、干渉チェックを行なうことを特徴とする請求項４記載の最接近点探索装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はロボットや自走車の運用における衝突回避や経路通路設計（パスプランニング）に適用できる最接近点探索装置に係わり、特にコンピュータ上に構築された複数の物体の形状モデル（ＣＧモデル）に対してそれらが互いに離れているか、接触しているか、干渉しているかを判定でき、しかも、物体間の最接近点、接触点、距離をリアルタイムに算出できる最接近点探索装置に関する。
本発明は、機械設計用ＣＡＤシステム、マニピュレータや自走車等の移動ロボットのパス生成、マルチメディアにおけるアニメーション作成、ゲームソフトウェア等コンピュータグラフィックスを応用した様々な分野に適用できる。
【０００２】
【従来の技術】
通常、ロボットはオペレータによる遠隔操作、あるいは計算機上で作成したデータに基づくプログラム操作により運用される。ロボットを遠隔操作する場合には、オペレータはロボットを取り囲む他の物体との不意な衝突、干渉を避けながら運用しなければならない。又、ロボットをプログラム操作する場合には、予め、計算機上にて障害物との衝突や干渉が生じないようにパスプランニングを行う必要がある。
一方、自走車を運用する場合、自走車は走行しようとする方向の環境地図データをセンサを通して取り込み、障害物を回避しながら自律走行し、あるいは、予め計算機上に格納されている地図情報に基づいて作成されたパスに従ってプログラム走行する。これらの場合にも、ロボットの場合と同じように逐次的な衝突回避や干渉の生じないパスプランニングが必要となる。
【０００３】
物体間の最接近点及び距離を測定することができれば、障害物を回避しながらロボットあるいは自走車を移動することができ、あるいは衝突や干渉が生じない走行経路をプログラムしてプログラム走行することができる。このため、ロボット、自走車における逐次的な衝突回避、事前のパスプランニングにおいて、物体間の最接近点探索方法が要望されている。すなわち、複数の物体が存在する時、それらが互いに離れているか、接触しているか、干渉しているかを判定し、かつ、物体間の最接近点（接触又は干渉している場合には、各々、接触点または干渉点）及び距離を効率良く算出する最接近点探索方法が要望されている。
【０００４】
最接近点探索問題に対する基本的なアプローチは、対象となる物体の形状、位置、姿勢データを計算機上に取り込み、初等幾何学的計算により解決する方法である。
通常、ＣＡＤ分野で使われているグラフィックシミュレータでは、平面的な凸多角形（凸ポリゴン）を複数枚貼付けて１つの物体を表現している。従って、２つの物体間の干渉状態をチェックする最も素朴な方法は、各々の物体を構成している凸ポリゴン間に対する最接近点探索を全ての凸ポリゴンの組み合わせについて行うものである。具体的には、空間上に任意に配置された２つの物体を構成する各凸ポリゴンに対し、最も近接しているポイントを各格子点（頂点）、辺、面について探索し、最接近距離を算出することである。勿論、最接近距離がゼロの場合には、２つの物体は干渉状態にあるといえる。この方法では、２つの物体を表現している格子点数をＭ１，Ｍ２としたときに、Ｏ（Ｍ１・Ｍ２）の計算負荷を伴う。尚、Ｏ（  ）は計算負荷のオーダを示す関数である。
【０００５】
Ｏ（Ｍ１・Ｍ２）の計算負荷を減らすためのアルゴリズムの開発が、主に、計算幾何学の分野において研究されており、Ｏ（ＭｌｏｇＭ）（Ｍ＝Ｍ１＋Ｍ２）という漸近特性（Ｍ１，Ｍ２が非常に大きい場合）を持ったアルゴリズムが開発されている。この種のアルゴリズムは理論的に正しいが、いずれも漸近特性に注目したものであり、Ｍ１，Ｍ２が実用的な大きさの場合にどれだけ計算負荷が減るかといった実際的な議論が欠けており、真に実用的なアルゴリズムとはいえなかった。
一方、歴史的には、各格子点間の垂直２等分線を結んで各格子点の近接関係を図示するボロノイ（Ｖｏｒｏｎｏｉ）図を使った方法や、三次元空間を象限毎に次々に八等分して対象の専有領域をデータベース化するオクトツリー（ｏｃｔ−ｔｒｅｅ）の方法による最接近点の探索法も知られている。これらの方法はいずれも対象が静的に一定である場合に有効であり、分解や組み立てなどにより対象が動的に次々と変化していく場合には不向きであった。
【０００６】
さて、最接近点探索アルゴリズムの実用度を上げるためには、次の１）〜５）に示す要件をカバーする必要がある。
１）  非凸多面体への拡張
計算幾何学などで従来開発されてきた最接近点探索アルゴリズムでは、取り扱う対象を凸多面体に限っている（図６９（ａ）参照）。しかし、実際には、図６９（ｂ）に示すように非凸多面体との干渉問題が多数発生する。このため、最接近点探索アルゴリズムを非凸多面体まで拡張する必要がある。尚、凸多面体（ｃｏｎｖｅｘ  ｐｏｌｙｈｅｄｒｏｎ）とは多面体内部の任意の２点を結ぶ線分がその多面体の内部に含まれるような多面体である。
【０００７】
２）  非単連結多面体への拡張
トラス（ｔｒｕｓｓ）の組み立てや配管工事などでは穴が開いた物体との干渉性を考慮する必要がある。図６９（ｃ）はトラスの組み立てを示すもので、ＴＲはトラス、ＲＢＨはロボットハンドである。
３）  一般自由曲面を持った物体への拡張
一般自由曲面を持った物体は、グラフィックシミュレータ上では複数のポリゴンの張り合わせで表現される。図６９（ｄ）は自由曲面を有するアンテナの組み立てを示すもので、ＡＴはアンテナ、ＲＢＨはロボットハンドである。
一般自由曲面を持った物体との干渉問題を扱うには、ポリゴン数を増やして近似の精度を上げるか、または曲面をスプライン曲面などで解析的に表現して取り扱う必要がある。
【０００８】
４）  環境変動への対応性
干渉問題で取り扱う対象物は、いつも静止しているとは限らず、一般には分解、運搬、組み立てなどの作業を通して環境が動的に変動していく。凸多面体を組み合わせて非凸の構造物を組み上げていくといったことは、しばしば発生することである。又、アームの各リングを凸多面体で表現した時、アーム自身は動的に動く凸多面体の集合体（一般には非凸物体）とみなすことができる。この時、図７０（ａ）に示すようにアームＡＭ先端のロボットハンドＲＢＨで対象物体ＯＢＪを把持しようとする場合には、ハンドと対象物体との干渉だけでなくアーム肘と他の物体ＯＢＳとの干渉も考慮しなければならない。実用的なアルゴリズムはこのような動的な環境変動に柔軟、迅速に対応できるものでなければならない。
【０００９】
５）  形状変化への対応
対象物体が柔軟性を有する場合などでは、物体自身の形状が動的に変化する（図７０（ｂ）参照）。これは４）  の環境変動の一種とも捉えることができるが、取扱は形状変化の方が難しい。
このため、Ｍｉｃｈｉｇａｎ大学のＧｉｌｂｅｒｔ教授は凸多面体間の最接近点探索問題に対する極めて実用的な方法（Ｇｉｌｂｅｒｔ法という）を提案している。このＧｉｌｂｅｒｔ法によれば、アルゴリズムの計算負荷は、非常に病的な例外を除いてほとんどの凸多面体の組合せに対してＯ（Ｍ１＋Ｍ２）となる。又、非凸多面体を複数の凸ポリゴンの集合とみなすことによりＧｉｌｂｅｒｔ法を非凸多面体へ拡張している。以下、Ｇｉｌｂｅｒｔ法について詳述する。
【００１０】
Ｇｉｌｂｅｒｔ法による凸多面体間の最接近点探索アルゴリズム
（ａ）  物体の表現法と物体間の距離
三次元空間上の凸多面体Ｘを考える。この時、Ｘ内の任意の点ｘは、Ｘの境界に位置する格子点（頂点）ｘｉ∈Ｘを使って以下のように表現できる。
ｘ＝Σλｉ・ｘｉ  （ｉ＝１〜ｍ）  ：ｘｉ∈Ｘ，λｉ≧０
λ１＋λ２＋・・・＋λｍ＝１            （１）
上式を格子点の集合［ｘｉ：ｉ＝１、２、・・・ｍ｝で張られる凸多面体の定義としてもよい。［ｘｉ｝のことを凸多面体Ｘのベースという。
今、２つの凸多面体Ｋ１，Ｋ２を考える。この時、２物体間の最接近距離は以下で定義される。
【００１１】
ｄ（Ｋ１，Ｋ２）＝ｍｉｎ｛｜ｘ−ｙ｜：ｘ∈Ｋ１，ｙ∈Ｋ２）            （２）
ここで、ｘ，ｙは位置ベクトルであり、
｜ｘ−ｙ｜＝√｛（ｘ１−ｙ１）２＋（ｘ２−ｙ２）２＋（ｘ３−ｙ３）｝２
である。従って、２つの凸多面体間の最接近点を求める問題は、（２）式を満足するようなｘ，ｙを以下の式で求めることである。
ｘ＝Σλｉ・ｘｉ  （ｉ＝１〜ｍ１）  ：ｘｉ∈Ｋ１，λｉ≧０
λ１＋λ２＋・・・＋λｍ１＝１
ｙ＝Σμｉ・ｙｉ  （ｉ＝１〜ｍ２）  ：ｙｉ∈Ｋ２，μｉ≧０
μ１＋μ２＋・・・＋μｍ２＝１            （３）
単純に考えると（３）式では、λとμの両方が変数であるから計算負荷は、Ｏ（Ｍ１・Ｍ２）である。（２）式は以下のように書き換えることが可能である。
【００１２】
任意の物体Ｋ１，Ｋ２の和集合、差集合をＫ１±Ｋ２＝｛ｘ±ｙ：ｘ∈Ｋ１，ｙ∈Ｋ２｝で定義する時、（２）式は次式と等価になる。
ｄ１２＝ｍｉｎ｛｜ｚ｜：ｚ∈Ｋ｝，Ｋ＝Ｋ１−Ｋ２            （４）
尚、物体Ｋ１，Ｋ２の和集合とは各物体の任意の位置ベクトルｘ，ｙのベクトル加算により得られる位置ベクトルｚの集合で構成された物体であり、物体Ｘ１，Ｘ２の差集合とは各物体の任意の位置ベクトルｘ，ｙのベクトル減算により得られる位置ベクトルｚの集合で構成された物体である。（４）式は、最接近点の探索問題が座標原点Ｏから多面体Ｋに対する最接近点を求める問題に等しいことを物語っている。多面体Ｋ１，Ｋ２がいずれも凸多面体の場合は、多面体Ｋも凸多面体になり、凸多面体Ｋを構成する格子点の集合Ｚは以下で与えられる。
【００１３】
Ｚ＝｛ｚｉ＝ｘｊ−ｙｋ：ｘｊ∈Ｋ１，ｙｋ∈Ｋ２，
ｉ＝１，２，・・・ｍ１ｍ２
ｊ＝１，２，・・・ｍ１
ｋ＝１，２，・・・ｍ２｝            （５）
以上をまとめると、以下の結論が導出される。すなわち、「２つの凸多面体Ｋ１，Ｋ２間の最接近点を求める問題は、座標原点Ｏから凸多面体Ｋ（＝Ｋ１−Ｋ２）への最接近点を求める問題に等しい。但し、Ｋはｍ１ｍ２個（ｍ１：Ｋ１の格子点数、ｍ２：Ｋ２の格子点数）の格子点｛ｚｉ＝ｘｊ−ｙｋ｝で張られた凸多面体である。」
【００１４】
（ｂ）  Ｇｉｌｂｅｒｔ法の概略
（ａ）における結論より、２つの凸多面体Ｋ１，Ｋ２間の最接近点を求める問題は、一点Ｏから凸多面体Ｋへの最接近点を求める問題に帰着される。
Ｇｉｌｂｅｒｔ法では、この事実と次に述べるサポート関数（Ｓｕｐｐｏｒｔ  Ｆｕｎｃｔｉｏｎ）と呼ばれる関数を使用する。凸多面体のサポート関数ｈｘ（η）：Ｒ３→Ｒとは以下で定義されるものである。
ｈｘ（η）＝ｍａｘ｛ｘｉ・η：ｉ＝１〜ｍ｝                （６）
ここで、｛ｘｉ｝は凸多面体Ｘのベースとなる格子点の集合であり、・はベクトル内積を意味しており、又、Ｒ３→Ｒは３次元より１次元への変換を意味している。従って、（６）式のサポート関数ｈｘ（η）は、図７１に示すようにベクトルηを決めた時、その方向に対して原点から最も離れた凸多面体Ｘの格子点を求めることを意味している。今、座標原点Ｏからこの格子点に向かうベクトル（位置ベクトル）を  ｓｘ（η）とすると（６）式は以下のようになる。
【００１５】
ｈｘ（η）＝ｓｘ（η）・η            （７）
Ｇｉｌｂｅｒｔ法による最接近点探索の計算負荷はＯ（Ｍ１＋Ｍ２）となる。その理由は、凸多面体Ｋ１，Ｋ２の差集合Ｋのサポート関数ｈｋ（η）、位置ベクトルｓｋ（η）に対して以下の法則が成り立つことに基づいている。
ｈｋ（η）＝ｈｋ１（η）＋ｈｋ２（−η），
ｓｋ（η）＝ｓｋ１（η）−ｓｋ２（−η）        （８）
上式は、ｍ１ｍ２個の格子点からなる凸多面体Ｋ＝Ｋ１−Ｋ２に対するサポート関数が凸多面体Ｋ１，Ｋ２に対するサポート関数の和で構成されることを意味している。従って、（６）式の定義から明らかなように、ｈｘ（η）を求める計算負荷はＯ（Ｍ１＋Ｍ２）となる。Ｇｉｌｂｅｒｔ法による最接近点探索の本質は、サポート関数ｈｘ（η）を繰返し使用することによって最接近点に漸次、近ずいていくところにある。すなわち、Ｇｉｌｂｅｒｔ法は、以下の４つのプロセスから構成される。
【００１６】
（ｃ）  Ｇｉｌｂｅｒｔ法による最接近点探索アルゴリズム
１）  初期化
凸多面体Ｋ１，Ｋ２に対し、差凸多面体Ｋ１−Ｋ２をＫとする。凸多面体Ｋ内の任意の点を取り、それらをｙ１，ｙ２・・・ｙｐ∈Ｋとする。尚、ｙ１，ｙ２・・・ｙｐは必ずも凸多面体Ｋのベース格子点である必要はない。ｐは一般に１≦ｐ≦４とする。この時、
初期格子点の集合Ｖｋ（＝Ｖ０）を
Ｖｋ＝｛ｙ１，ｙ２・・・ｙｐ｝，    ｋ＝０
とする。
【００１７】
２）  基本多面体に対する最接近点探索
要素数ｐ（４個以下）からなる格子点の集合Ｖｋに対し、
νｋ＝ν（ｃｏ  Ｖｋ）            （９）
を計算する。ここで、ｃｏ  Ｖｋは、格子点集合Ｖｋをベースとする凸多面体、ν（Ｘ）は座標原点Ｏから凸多面体Ｘへの最接近点ベクトル（位置ベクトル）を表す。
【００１８】
３）最接近点判定
Ｒ３→Ｒへの関数ｇＫ（ｘ）を以下のように定義する。
ｇＫ（ｘ）＝｜ｘ｜２＋ｈＫ（−ｘ）
上式において右辺第１項は、凸多面体Ｋ上の所定ポイントの位置ベクトルをｘとするとき、該ポイント迄の距離の二乗を意味し、右辺第２項はベクトルｘ方向に原点から最も近い格子点位置ベクトルとベクトル−ｘとの内積を意味する。換言すれば、ｈＫ（−ｘ）は格子点の位置ベクトルとｘの内積のうち最小となる値である。
ｇＫ（ｘ）は最接近点の判定関数となり、ｘが原点ＯからＫへの最接近点であるならば、また、その時に限りｇＫ（ｘ）＝０となる。尚、ｇＫ（ｘ）が最接近点の判定関数となることは証明できるが割愛する。詳細は、「ＩＥＥＥ  ＪＯＵＮＡＬ  ＯＦ  ＲＯＢＯＴＩＣＳ  ＡＮＤ  ＡＵＴＯＭＡＴＩＯＮ，  ＶＯＬ．４，  ＮＯ．２，  ＡＰＲＩＬ  １９８８、頁１９３〜２０３「Ａ  Ｆａｓｔ  Ｐｒｏｃｅｄｕｒｅ  ｆｏｒＣｏｍｐｕｔｉｎｇ  ｔｈｅ  Ｄｉｓｔａｎｃｅ  Ｂｅｔｗｅｅｎ  Ｃｏｍｐｌｅｘ  Ｏｂｊｅｃｔｓ  ｉｎ  Ｔｈｒｅｅ−Ｄｉｍｅｎｓｉｏｎａｌ  Ｓｐａｃｅ」を参照されたい。
以上より、もし、（９）式で求めたνｋに対し、
ｇＫ（νｋ）＝０      （１０）
ならば、ν（Ｋ）＝νｋとし、最接近点探索処理を終了する。
【００１９】
４）  ｋのインクリメント
（１０）式が成立しなければ、ｋをインクリメントする。すなわち、Ｖ（ｋ＋１）を
Ｖ（ｋ＋１）＝Ｖｋ′∪｛ｓＫ（−νｋ）］            （１１）
とする。ここで、Ｖｋ′はＶｋ′⊆Ｖｋであり、かつ、νｋ∈ｃｏ  Ｖｋ′となるＶｋの最小部分集合である。
（１１）式は、Ｖｋの部分集合Ｖｋ′（νｋを含む）と、Ｖｋにおける最接近点ベクトルνｋ方向に原点から最も近い最小の格子点ｓＫ（−νｋ）を含む集合を意味する。
以上から、（１０）式が成立しなければ、（１１）式によりｋをインクリメントして２）
へ戻り以降の処理を（１０）式が成立するまで繰り返す。
【００２０】
（ｄ）  Ｇｉｌｂｅｒｔ法による最接近点探索アルゴリズムの適用
上記Ｇｉｌｂｅｒｔ法による最接近点探索アルゴリズムの理解度を深めるために図７２を参照して最接近点探索を説明する。
図７２において、初期値Ｖ０＝｛ｚ１，ｚ２，ｚ３｝とし、Ｖ０における最接近点ベクトルを求めるとν０となる。この時、（１０）式は満たされないからｋをインクリメントする。
Ｖ１＝Ｖ０′∪｛ｓｋ（−ν０）］＝Ｖ０′∪｛ｚ４｝
であり、又、Ｖ０′＝｛ｚ２，ｚ３｝となるからＶ１＝｛ｚ２，ｚ３，ｚ４｝となる。
Ｖ１における最接近点ベクトルを求めるとν１となる。この時、（１０）式は満たされないからｋをインクリメントする。
【００２１】
Ｖ２＝Ｖ１′∪｛ｓｋ（−ν１）］＝Ｖ１′∪｛ｚ５｝
であり、又、Ｖ１′＝｛ｚ３，ｚ４｝となるからＶ２＝｛ｚ３，ｚ４，ｚ５｝となる。
Ｖ１における最接近点ベクトルを求めるとν２となり、このν２により（１０）式が満たされ、ν２は最接近点ベクトルとなり、
ν２＝ν（Ｋ）∈ｃｏ  ｛ｚ４，ｚ５｝
となる。この結果、最接近距離ｄはｄ＝｜ν２｜となる。
同じことを初期値を変えて行ってみる。図７２において、初期値Ｖ０＝｛ｚ２｝とし、Ｖ０における最接近点ベクトルを求めるとν０′（＝ｚ２）となる。この時、（１０）式は満たされないからｋをインクリメントする。
Ｖ１＝Ｖ０′∪｛ｓＫ（−ν０′）］＝Ｖ０′∪｛ｚ５｝
であり、又、Ｖ０′＝｛ｚ２｝であるからＶ１＝｛ｚ２，ｚ５｝となる。
【００２２】
Ｖ１における最接近点ベクトルを求めるとν１′となる。この時、（１０）式は満たされないからｋをインクリメントする。
Ｖ２＝Ｖ１′∪｛ｓＫ（−ν１′）］＝Ｖ１′∪｛ｚ４｝
であり、又、Ｖ１′＝｛ｚ２，ｚ５｝であるからＶ２＝｛ｚ２，ｚ４，ｚ５｝となる。
Ｖ２における最接近点ベクトルを求めるとν２′（＝ν２）となり、このν２′により（１０）式が満たされ、ν２は最接近点ベクトルとなり、
ν２′＝ν２＝ν（Ｋ）∈ｃｏ  ｛ｚ４，ｚ５｝
となる。この結果、最接近距離ｄはｄ＝｜ν２｜となり、初期値Ｖ０を
Ｖ０＝｛ｚ１，ｚ２，ｚ３｝
とした場合と同じ結果が得られる。
【００２３】
（ｅ）  考察
上記アルゴリズムにおいて、計算を要するのは、（９），（１０），（１１）式の部分である。まず、（９）式であるが、この式の意味は、つまり１点Ｏから点、辺、面、または４面体への最接近点を計算せよということである。この部分は、凸多面体の複雑度には関係しない部分であり、後述するようなサブルーチンを予め用意しておくことにより実行できる。
次に、（１０）式の計算であるが、ｇＫ（νｋ）のｈＫ（−νｋ）を計算するに際しては（８）式の分解則を使用する。この部分は、（６）式に示すように、各凸多面体Ｋ１，Ｋ２のベース格子点に対する内積（ベース格子点の位置ベクトルとνｋの内積）を評価するだけで計算される。すなわち、ｈＫ（−νｋ）はベース格子点の位置ベクトルとνｋの内積のうち最小のものを求めることであり、従って、この部分の計算負荷はＯ（Ｍ１＋Ｍ２）である。
【００２４】
（１１）式は、ｇＫ（νｋ）を計算する過程でｓＫ（−νｋ）が求まり、後述する補題アルゴリズムから自動的にＶｋ′が求まるため、この部分の計算負荷はＭ１，Ｍ２に依存しない無視可能な定数（ｎｅｇｌｉｇｉｂｌｅ  ｃｏｎｓｔａｎｔ）である。
Ｇｉｌｂｅｒｔ法の優れたところは、ほとんど全ての凸多面体に対し、上記１）  〜４）  の４つのプロセスを数回繰り返すだけで最接近点に到達することである。多くの場合、３〜４回の繰返しにより収束することが数値実験により確かめられている。
以上より、Ｇｉｌｂｅｒｔ法による最接近点探索法の本質を一言でいうならば、次のように要約できる。すなわち、
２つの凸多面体Ｋ１，Ｋ２間の最接近点は、凸多面体Ｋ＝Ｋ１−Ｋ２に対し、判定関数ｇＫ（ｘ）＝｜ｘ｜２＋ｈＫ（−ｘ）を繰返し適用することによって求めることができる。そして、繰返しの回数は殆どの凸多面体に対して３ないし４回で収束する。
【００２５】
なお、Ｇｉｌｂｅｒｔ法の初期格子点（初期値）Ｖ０は一般には任意であるが、以下に示すような各凸多面体の重心差分方向の格子点から出発するのが効率的である。
ｖ０＝｛ｓＫ（−ｚｃ１＋ｚｃ２）｝            （１２）
ここで、ｚｃ１，ｚｃ２は、それぞれ
ｚｃ１＝Σ（ｘｉ／Ｍ１）    （ｉ＝１〜Ｍ１）    ｘｉ：凸多面体Ｋ１のベース格子点
ｚｃ２＝Σ（ｙｉ／Ｍ２）    （ｉ＝１〜Ｍ２）    ｙｉ：凸多面体Ｋ２のベース格子点
である。
【００２６】
（ｆ）  Ｇｉｌｂｅｒｔ法の補題
Ｇｉｌｂｅｒｔ法のステップ２）  では、４以下の格子点に張られる凸多面体（点、辺、面、４面体）に対する１点（原点Ｏ）からの最接近点ベクトルを求めるアルゴリズムが必要であった。以下で述べる補題は５点以上の格子点で張られる凸多面体にも成立するが、格子点数が少ない場合に特に効率的である。
１）  補題１
格子点集合Ｙ＝｛ｙ１，ｙ２，・・・ｙｍ｝∈Ｒ３に対し、Ｙの任意の部分集合を
Ｙｓ＝［ｙｉ：ｉ∈Ｉｓ⊆｛１，２，・・・ｍ｝｝、Ｉｓの補集合をＩｓ′とする。この時、数列Δｉ（Ｙｓ）を次の法則に基づいて作成する。
Δｉ（｛ｙｉ］）＝１，ｉ∈Ｉｓ
Δｊ（Ｙｓ∪｛ｙｊ｝）＝ΣΔｉ（Ｙｓ）（ｙｉｙｋ−ｙｉｙｊ）    （ｉ∈Ｉｓ）
但し、ｋ＝ｍｉｎ｛ｉ：ｉ∈Ｉｓ｝，ｊ∈Ｉｓ
この時、次の性質を満たすＹの部分集合がＹｓが存在する。
（１）  ｉ∈Ｉｓである各々のｉに対してΔｉ（Ｙｓ）＞０    （ｉ∈Ｉｓ）
（２）  ｊ∈Ｉｓである各々のｊに対してΔｊ（Ｙｓ∪｛ｙｊ｝）≦０    （ｊ∈Ｉｓ）
【００２７】
２）  補題２
格子点集合Ｙ＝｛ｙ１，ｙ２，・・・ｙｍ｝∈Ｒ３に対し、Ｙで張られる凸多面体をｃｏ  Ｙ、原点Ｏからｃｏ  Ｙへ至る最接近点ベクトルをν（ｃｏ  Ｙ）とする時、    ν（ｃｏ  Ｙ）は以下の公式で与えられる。
ν（ｃｏ  Ｙ）＝Σλｉｙｉ，ｉ∈Ｉｓ⊆｛１，２，・・・ｍ｝
ここで、比例定数λｉは、補題１で求めた部分集合Ｙｓに対するΔｉ（Ｙｓ）を使って次式で与えられる。
λｉ＝Δｉ（Ｙｓ）／Δ（Ｙｓ）    ，Ｙｓ＝｛ｙｉ：ｉ∈Ｉｓ｝
Δ（Ｙｓ）＝ΣΔｉ（Ｙｓ）    （ｉ∈Ｉｓ）
上記補題の詳しい証明はここでは省略するが、補題の意味するところは簡単に理解できる。上記補題を４面体に適用してみる。図７３（ａ）〜（ｄ）に示すように、１点Ｏと４面体との最接近ベクトルは、４面体の各格子点、辺、面、又は４面体内部に存在する場合があり得る。従って、Ｙの部分集合Ｙｓが１点からなる場合は格子点に、２点からなる場合は辺上に、３点からなる場合は面上にそれぞれ最接近点が存在する場合に対応し、４点からなる場合は４面体内部に原点Ｏが存在する場合に相当する。
【００２８】
補題１、２を実際に実行する場合には、以下のアルゴリズムに従う。
（ｇ）  Ｇｉｌｂｅｒｔ法の補題アルゴリズム
格子点集合Ｙ＝｛ｙ１，ｙ２，・・・ｙｍ｝∈Ｒ３に対し、Ｙの部分集合を
Ｙｓ＝［ｙｉ：ｉ∈Ｉｓ⊆｛１，２，・・・ｍ｝｝、Ｉｓの補集合をＩｓ′とする。又、ｓ＝１、２、・・・σとすることによりＹの全ての部分集合が指示されるものとする。この時、Ｇｉｌｂｅｒｔ法のアルゴリズ２）  は以下のようになる。
【００２９】
２）１  １→ｓ
２）２  もし、ｉ∈Ｉｓの各々のｉに対して
Δｉ（Ｙｓ）＞０    （ｉ∈Ｉｓ）
であり、かつ、ｊ∈Ｉｓの各々のｊに対して
Δｊ（Ｙｓ∪｛ｙｊ｝）≦０    （ｊ∈Ｉｓ）
ならば、
λｉ＝Δｉ（Ｙｓ）／Δ（Ｙｓ），Ｙｓ＝［ｙｉ：ｉ∈Ｉｓ｝
Δ（Ｙｓ）＝ΣΔｉ（Ｙｓ）    （ｉ∈Ｉｓ）
ν（ｃｏ  Ｙ）＝Σλｉｙｉ    （ｉ∈Ｉｓ）            （１２）′
としてストップし、以後Ｇｉｌｂｅｒｔ法のアルゴリズ３）を実行する。
２）３  しかし、２）２の条件が成立しなければ、ｓをインクリメントしてステップ２）２を実行する。すなわち、２）２の条件が成立する迄２）  ２，２）  ３  のステップを繰返し、２）２の条件が成立した時、ν（ｃｏ  Ｙ）を計算して以後Ｇｉｌｂｅｒｔ法のアルゴリズ３）を実行する。
【００３０】
（ｉ）  数値試験
Ｇｉｌｂｅｒｔ法による最接近点探索アルゴリズムは、次の入出力を持つサブルーチンにまとめることができる。
入力：２凸多面体の各格子点の座標値
出力：最接近点の座標値、最接近距離
図７４はＧｉｌｂｅｒｔ法をフォルトランで実行し、各種凸多面体に適用した場合の数値試験例であり、星印は２物体が接近している場合（フリー）、白丸は２物体が接触している場合、四角黒印は２物体が干渉している場合である。尚、使用した計算機はＨａｒｒｉｓ  ８００で、ＶＡＸ  ７８０より少々速く現在のパソコン程度の性能である。
【００３１】
図７４の横軸に示されているＭは格子点数、縦軸に示されているＥＦは次式で定義される量である。
ＥＦ＝（ｔＭＮＭ＋ｔＡＮＡ＋ｔＤＮＤ＋ｔＣＮＣ）／（ｔＭ＋ｔＡ）            （１３）
ここで、ＮＭは積算回数、ＮＡは加算回数、ＮＤは除算回数、ＮＣは比較演算回数であり、ｔＭ，ｔＡ，ｔＤ，ｔＣは各々に要する計算時間であり、Ｈａｒｒｉｓ  ８００の場合には、ｔＭ＝３．８μｓ，ｔＡ＝２．１μｓ，ｔＤ＝６．７μｓ，ｔＣ＝１．７μｓである。ＥＦの値は、計算機によって大きく変動することはなくマシーンインデペンデントな指標として使うことができる。Ｈａｒｒｉｓ  ８００の場合には、ＥＦに６／１０６を掛けた値がＣＰＵスケールに相当する。Ｓｐａｒｃチップ（ＣＰＵのチップ）を使ったワークステーションの場合には更に一桁以上の高速性を期待できる。
【００３２】
（ｊ）  結論
１）  以上からＧｉｌｂｅｒｔ法による最接近点探索は、２つの凸多面体の格子点の総数をＭとした時、干渉している場合、接触している場合、フリーの場合それぞれにおいて、ほぼＭに比例した計算負荷を有し、比例定数はＥＦ／Ｍの値で見て１４〜１９の値に収まる。
２）  Ｇｉｌｂｅｒｔ法を１Ｍ  Ｆｌｏｐｓ程度のワークステーション上で２つの凸多面体に適用する場合、格子点の総数が２００程度でも数ｍｓで最接近点の算出が可能である。
【００３３】
【発明が解決しようとする課題】
以上より、Ｇｉｌｂｅｒｔ法によれば、２物体間の最接近点探索を短時間で効率良く実行できる効果がある。
しかし、Ｇｉｌｂｅｒｔ法には以下のような限界ないしは制約条件が存在する。
１）  Ｇｉｌｂｅｒｔ法の限界：連続探索問題への対応
２つの凸多面体間の最接近点を連続的に追い掛ける場合を考察する。このように２つの凸多面体間の最接近点を連続的に追い掛ける問題を連続探索問題という。物体の移動に伴い、最接近点は各々の凸多面体において、面から辺、辺から頂点、頂点から面へと渡り歩くように遷移していく。従って、ある時点で最接近点が求まった場合、次の時点における最接近点は前の最接近点の近傍に存在するはずである。換言すれば、最接近点の探索は局所的な問題であり、凸多面体全領域の複雑度とは無関係のはずである。
【００３４】
しかし、Ｇｉｌｂｅｒｔ法では、連続探索問題において全格子点を考慮した最接近探索処理を行うため、凸多面体の全格子点数Ｍ１，Ｍ２に依存したＯ（Ｍ１＋Ｍ２）の計算負荷が最接近点探索の都度必要となる問題がある。又、計算負荷が大きいため、ロボット、自走車が高速で移動する場合には最接近点探索処理が間にあわなくなる問題がある。
【００３５】
２）  Ｇｉｌｂｅｒｔ法の制約条件：非凸多面体への対応
Ｇｉｌｂｅｒｔ法は凸多面体間の最接近点を探索するアルゴリズムである。このため、実用度を上げるために、非凸多面体、非単連結多面体、自由曲面を持った物体への拡張が必要である。Ｇｉｌｂｅｒｔ法により非凸多面体間の最接近点探索を行う場合には、図７５に示すように、各非凸多面体Ｋ１，Ｋ２を複数の凸多面体Ａ，Ｂ；ａ，ｂ，ｃに分割し、全ての凸多面体の組み合わせについて最接近点探索アルゴリズムを適用し、得られた最接近距離のうち最も短いものを選択する。しかし、かかる方法では組み合わせの数が多くなり、計算負荷が大きくなる問題がある。
以上から本発明の目的は、物体間の連続探索問題を少ない計算負荷で高速に実行できる最接近点探索装置を提供することである。
本発明の別の目的は、少なくとも一方が非凸多面体の物体間の最接近点探索を少ない計算負荷で高速に実行できる最接近点探索装置を提供することである。
【００３６】
【課題を解決するための手段】
図１は本発明の原理説明図である。
図１において、２２ａは対象となる２つの凸多面体を覆う全ポリゴンデータを記憶するポリゴンデータ記憶部、２２ｂは近接点線形リスト記憶部、２４は各ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを作成する近接点線形リスト作成部、２６は最接近点探索処理部である。
【００３７】
【作用】
凸多面体間の最接近点を連続的に探索することにより両者の干渉チェックを行なう場合、凸多面体を覆う全ポリゴンの頂点座標を入力してポリゴンデータ記憶部２２ａに記憶する。近接点線形リスト作成部２４は各ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを最接近点探索処理の実行前に作成する。しかる後、最接近点探索処理部２６は、最新に求まっている最接近点に近接する頂点を近接点線形リストより求め、これら頂点の中より次の時刻における最接近点を探索して干渉チェックを行なう。
【００３８】
第１、第２の非凸多面体間の干渉チェックを行なう場合、各非凸多面体をそれぞれ凸多面体に分解し、凸多面体間の最接近点を連続的に探索することにより非凸多面体間の干渉チェックを行なう。各区凸多面体間の干渉チェックを行うために、予め、近接点線形リスト作成部２４は前記凸多面体毎に、該凸多面体を覆う全ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを作成する。最接近点探索処理部２６は、▲１▼前記非凸多面体毎に、該非凸多面体の頂点座標値のうち、各軸方向の最大座標値及び最小座標値を求め、該最大座標値及び最小座標値により該非凸多面体を包む包絡球を生成し、▲２▼第１、第２の非凸多面体の包絡球が干渉するかチェックし、▲３▼干渉した後は前記非凸多面体を分解して得られている凸多面体間の最接近点を探索し、▲４▼最新に求まっている最接近点に近接する頂点を前記近接点線形リストより求め、これら頂点の中より次の時刻における最接近点を探索し、▲５▼各凸多面体間の最接近点間距離が最も短いものを用いて干渉チェックを行なう。
【００３９】
第１、第２の非凸多面体間の干渉チェックを行なう場合、各非凸多面体をそれぞれ凸多面体に分解し、凸多面体間の最接近点を連続的に探索することにより非凸多面体間の干渉チェックを行なう。各区凸多面体間の干渉チェックを行うために、予め、近接点線形リスト作成部２４は前記凸多面体毎に、該凸多面体を覆う全ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えた近接点線形リストを作成する。最接近点探索処理部２６は、▲１▼各非凸多面体を包む最小の凸多面体（凸包）を生成し、▲２▼第１、第２の非凸多面体の凸包が干渉するかチェックし、▲３▼干渉した後は凸多面体間の最接近点を探索し、最新に求まっている最接近点に近接する頂点を前記近接点線形リストより求め、これら頂点の中より次の時刻における最接近点を探索し、▲４▼各凸多面体間の最接近点間距離が最も短いものを用いて干渉チェックを行なう。
【００４０】
【実施例】
（Ａ）  凸多面体間の最接近点探索の第１の方法
（ａ）  原理
Ｇｉｌｂｅｒｔ法でＯ（Ｍ１＋Ｍ２）の計算負荷が発生するプロセスは、ステップ３）における判定関数ｇＫ（νｋ）のｈＫ（−νｋ）の内積計算においてである。すなわち、ｈＫ（−νｋ）は（８）式より
0003556644.tif 000002
であるから、ｈＫを評価する過程で凸多面体Ｋ１，Ｋ２の全格子点にわたる内積を計算して最小のものを決定することになるため、Ｏ（Ｍ１＋Ｍ２）の計算負荷が発生する。
【００４１】
内積の計算回数を減らす有効な方策は、凸多面体Ｋ１，Ｋ２を格子点数がより少ない凸多面体又は凸多角形に分割し、現在の最接近点の近傍に位置する凸多面体又は凸多角形についてのみ内積を評価する方法である。
【００４２】
最も簡単な分割法は、図２に示すように、凸多面体を表面多角形の集合に分割する方法である。この時、凸多面体における最接近点は、
１）格子点上に存在する場合、
２）辺上に存在する場合、
３）面上に存在する場合
の３通りがあり得る。
【００４３】
そこで、それぞれに対して内積を評価する表面多角形を以下のように制限すれば良い。すなわち、最接近点が
１）格子点上に存在する場合には、その格子点を頂点に持つ表面多角形の全て、
２）辺上に存在する場合には、その辺を１辺として持つ表面多角形の全て、
３）面上に存在する場合には、現在最接近点が存在する表面多角形・・・（１５）
を、内積を評価する表面多角形とする。すなわち、最接近点が存在する位置に応じて（１５）の１）〜３）で示す表面多角形を構成する格子点（頂点）についてのみ内積を評価し（内積が最小となる格子点を求め）、判定関数ｇＫ（νｋ）を演算すればよい。このようにすれば、内積評価に必要となる格子点数が減り、計算負荷が減少する。
【００４４】
（ｂ）  最接近点探索のための凸多面体のデータ構造
上記１）〜３）により連続的に内積評価に必要となる表面多角形を求めるためには、凸多面体を定義するデータ構造に工夫を要する。図３は図２の６面体の場合のデータ構造例であり、有向グラフ型構造データを採用している。この有向グラフ型構造データは抽象化すると以下のように表現できる。
【００４５】
１）凸多面体を構成する表面多角形に番号を付け、各々に１つずつポリゴンノード（ｐｏｌｙｇｏｎ  ｎｏｄｅ）を割り付ける。
２）各ポリゴンノードの下に、その多角形を構成する全格子点と全辺を並べるための格子点ノード（Ｖｅｒｔｅｘ  ｎｏｄｅ）とエッジノード（Ｅｄｇｅ  ｎｏｄｅ）を割り付ける。多角形を構成する格子点の集合と辺の集合は、格子点ノードとエッジノードに対してそれぞれブラザーノード（ｂｒｏｔｈｅｒ  ｎｏｄｅ）として存在する。
３）格子点ノードとエッジノードの下に、それらの格子点又は辺を構成要素として持つ多角形をポリゴンノードとして割り付ける。多角形が複数存在する場合にはブラザーノードとして割り付ける。
【００４６】
（ｃ）  判定関数ｇＫ（νｋ）の内積評価法
以上のように、凸多面体のデータ構造を作成すると、（１５）は以下のように表現できる。
判定関数ｇＫ（νｋ）の計算におけるｈＫ（−νｋ）の評価は、
１）最接近点が格子点上に存在する場合には、該格子点に対応する格子点ノードの下に連なる全てのポリゴンノードに応じた表面多角形の格子点について内積評価を行う、
２）最接近点が辺上に存在する場合には、該辺に対応するエッジノードの下に連なる全てのポリゴンノードに応じた多角形の格子点について内積評価を行う、
３）最接近点が面上に存在する場合は、該面の格子点について内積評価を行う。・・・（１５）′
内積評価を（１５）′のように制限した場合には、判定関数ｇＫ（νｋ）の計算負荷は、凸多面体の表面凸多角形の格子点数の最大値をＬとすると、Ｏ（Ｌ）以下に抑えることができる。
【００４７】
（ｄ）  本発明の内積評価法を採用した最接近点探索アルゴリズム
図４は本発明による２つの凸多面体間の最接近点探索アルゴリズムの流れ図である。
まず対象となる２つの凸多面体を特定するデータを入力する（初期入力：凸多面体の環境モデル設定）。この場合、各凸多面体を特定するデータを以下の方式で入力する（図５参照）。すなわち、第１の凸多面体ＰＨ１を構成する表面多角形にポリゴン番号Ｐ１ｉ（ｉ＝１，２，・・・ｍ）を付ける。ついで、第ｉポリゴン番号Ｐ１ｉを入力し、しかる後、ポリゴン番号Ｐ１ｉを構成する格子点の座標値及びポリゴン番号Ｐ１ｉの外向き法線方向を入力し、全ポリゴンＰ１ｉ（ｉ＝１，２，・・・ｍ）についてポリゴン番号、格子点座標値、外向き法線方向を入力する。なお、ポリゴンを構成する格子点の座標値は外向き法線ベクトルに向かって右回りに入力する。
【００４８】
以後、同様に、第２の凸多面体ＰＨ２を構成する表面多角形にポリゴン番号Ｐ２ｉ（ｉ＝１，２，・・・ｎ）を付ける。ついで、第ｉポリゴン番号Ｐ２ｉを入力し、しかる後、ポリゴン番号Ｐ２ｉを構成する格子点の座標値及びポリゴン番号Ｐ２ｉの外向き法線方向を入力し、全ポリゴンＰ２ｉ（ｉ＝１，２，・・・ｎ）についてポリゴン番号、格子点座標値、外向き法線方向を入力する（以上ステップ１０１）。
各凸多面体を特定するデータの入力が完了すると、入力データに基づいて有向グラフ型構造データを作成する（ステップ１０２）。
有向グラフ型構造データの作成が完了すると凸多面体ＰＨ１，ＰＨ２に対してＧｉｌｂｅｒｔ法を適用する。まず、初期格子点集合Ｖｋ（ｋ＝０）を決定し（ステップ１０３）、該初期格子点集合Ｖ０について最接近点ベクトルνｋを計算して出力する（ステップ１０４）。
【００４９】
ついで、該最接近点に対応する各凸多面体ＰＨ１，ＰＨ２上の最接近点が格子点上、辺上、面上のいずれに存在するか調べ、存在位置に基づいて（１５）′により内積評価に使用する格子点を決定し、判定関数ｇＫ（νｋ）を演算する（ステップ１０５）。
尚、凸多面体ＰＨ１上の格子点をｘ１ｉ、凸多面体ＰＨ２上の格子点をｘ２ｉとすると（１２）′式は
0003556644.tif 000003
となる。（１２）″の右辺第１項は凸多面体ＰＨ１上の最接近点の位置ベクトルであり、右辺第２項は凸多面体ＰＨ２上の最接近点の位置ベクトルである。従って、最接近点ベクトルνｋを演算する過程で（１２）″式の右辺第１項、右辺第２項を計算することにより最接近点ベクトルに対応する各凸多面体ＰＨ１，ＰＨ２上の最接近点を求めることができる。
【００５０】
判定関数が求まれば、ｇＫ（νｋ）＝０になったか調べ（ステップ１０６）、ｇＫ（νｋ）＝０であれば最接近点探索は終了する。しかし、ｇＫ（νｋ）が０でなければ、ｋをインクリメントし、次の格子点集合Ｖ１について最接近点ベクトルを出力する（ステップ１０７）。
以後ステップ１０５以降の処理を繰り返せば、最終的にｇＫ（νｋ）＝０となり、最接近距離、最接近点が求まる。すなわち、２つの凸多面体ＰＨ１，ＰＨ２の差集合凸多面体までの最接近点ベクトルは（１２）′式で求まるから、原点Ｏから該最接近点までの距離が最接近距離となる。又、この時、（１２）″式の右辺第１項、第２項により各凸多面体ＰＨ１，ＰＨ２上の最接近点を求めることができる。
【００５１】
（ｅ）  本発明の内積評価法を採用した最接近点探索装置の構成図
図６は２つの凸多面体間の最接近点探索装置の構成図である。図中、１１は対象となる２つの凸多面体を特定するデータ（図５参照）を入力する入力部、１２は入力された凸多面体データを記憶する記憶部、１３は凸多面体毎に凸多面体データを用いて有向グラフ型構造データを作成する有向グラフ型構造データ作成部、１４は有向グラフ型構造データを記憶する記憶部、１５はＧｉｌｂｅｒｔ法に基づいて２物体間の最接近点探索処理を行なう最接近点探索処理部、１６は最接近点が存在する位置（格子点、辺、面）に応じた内積評価用の格子点を有向グラフ型構造データ記憶部１４より読出して最接近点探索処理部１５に入力する内積評価用格子点読み出し部である。
【００５２】
入力部１１から凸多面体ＰＨ１，ＰＨ２を特定するデータを入力して記憶部１２に記憶する。有向グラフ型構造データ作成部１３は入力データに基づいて有向グラフ型構造データを作成し、記憶部１４に記憶する。有向グラフ型構造データの作成が完了すると最接近点探索処理部１５は凸多面体ＰＨ１，ＰＨ２に対してＧｉｌｂｅｒｔ法を適用する。まず、初期格子点集合Ｖｋ（ｋ＝０）を決定し、該初期格子点集合Ｖ０について最接近ベクトルνｋを計算する。ついで、最接近ベクトルνｋに応じた各凸多面体上の最接近点を求め、それぞれの最接近点が格子点上、辺上、面上のいずれに存在するか調べ、存在位置（格子点、辺、面）を内積評価用格子点読み出し部１６に入力する。読み出し部１６は最接近点位置に基づいて定まる内積評価に使用する格子点を有向グラフ型構造データ記憶部１４より読出して最接近点探索処理部１５に入力する。最接近点探索処理部１５は入力された格子点を用いて内積評価を行なって判定関数ｇＫ（νｋ）を演算する。しかる後、判定関数が求まれば、ｇＫ（νｋ）＝０になったか調べ、ｇＫ（νｋ）＝０であれば最接近点探索は終了し、最接近距離、最接近点を出力する。しかし、ｇＫ（νｋ）が０でなければ、ｋをインクリメントし、次の格子点集合Ｖ１について最接近点ベクトルを出力する。以後、同様な処理が行なわれ、最終的にｇＫ（νｋ）＝０となり、最接近距離、最接近点が出力される。尚、凸多面体ＰＨ１，ＰＨ２が移動すれば、所定時間毎の移動データに基づいて移動後の各凸多面体の格子点位置を求め、上記処理を行う。
【００５３】
（Ｂ）  凸多面体間の最接近点探索の第２の方法
（ａ）  原理
最接近点探索の第１の方法では、対象物体である凸多面体をそれぞれ包む表面凸多角形に分割したため、計算負荷は凸多角形の格子点数のオーダであった。
この第１の最接近探索方法の考え方を更に突き詰めると、凸多角形の表面を三角形ポリゴンで覆い尽くせば１回の内積評価の回数が最も少なくなることは明らかである。図７（ａ）は原点Ｏの移動に合わせて凸多面体Ｋとの最接近点が表面多角形上を推移して行く状態の説明図である。原点Ｏの移動に応じて最接近点Ｓは凸多角形Ｐ１→凸多角形Ｐ２→凸多角形Ｐ３上を連続的に推移して行く。従って、凸多角形を図７（ｂ）に示すように三角形Ｔｉｊに分割すれば、原点Ｏの移動に応じて最接近点Ｓは三角形Ｔ１１→Ｔ１２→Ｔ２１→Ｔ２２→Ｔ２３→Ｔ２４→Ｔ２５→Ｔ２６→Ｔ３１上を連続的に推移して行く。
【００５４】
そこで、凸多面体を構成する表面凸多角形をすべて三角形に分割して、第１の最接近探索処理を施しても何等問題はない。そして、三角形に分割することにより１回の内積評価の回数を減少できる。例えば、図７（ａ），（ｂ）において最接近点Ｓ′が辺Ｅ１１上に存在すると仮定すれば、図７（ａ）の場合には、内積評価に使用する格子点はＶ１〜Ｖ６の６個存在するが、図７（ｂ）の場合には、Ｖ１，Ｖ３，Ｖ４，Ｖ６の４個で良く、１回の内積評価の回数を減少できる。
以上より、対象となる凸多面体に前処理を施して表面凸多角形を全て三角形ポリゴンに分割したデータ構造とすれば、ｇＫ（νｋ）を連続的に評価する場合の計算負荷は、対象となる凸多面体の複雑度に関係なく一定値以下に押さえることができる。
【００５５】
任意の凸多角形を三角形ポリゴンに分割する方法は、計算幾何学の分野で幾つかアルゴリズムが知られている。最もよく知られている方法は、動的計画法を使って弦の長さの和を最小にするような三角形分割法である。図８にその例を示す。なお、弦とはＬ１〜Ｌ６のように三角形に分割するための線分である。このアルゴリズムの計算負荷は、始めの多角形の格子点数をｎとするとＯ（ｎ３）である。多角形を三角形にするアルゴリズムに関しては、浅野哲夫著「計算幾何学」（朝倉書店）、Ｔｅ．  Ａｓａｎｏ，  Ｔａ．  Ａｓａｎｏ  ａｎｄ  Ｙ．  Ｏｈｓｕｇａ：”Ｐａｒｔｉｔｉｏｎｉｎｇ  ａ  Ｐｏｌｙｇｏｎａｌ  Ｒｅｇｉｏｎ  ｉｎｔｏ  ａ  Ｍｉｎｉｍｕｍ  Ｎｕｍｂｅｒ  ｏｆ  Ｔｒｉａｎｇｌｅｓ”，  Ｔｒａｎｓ．  ＩＥＣＥ  ｏｆ  Ｊａｐａｎ，  ｖｏｌ．Ｅ６７，  ｐｐ．２３２〜２３３、  １９８４を参照されたい。
【００５６】
以上より、最接近点の連続探索問題への対応法（第２の最接近点探索方法）は以下のようにまとめることができる。
１）前処理１：対象凸多面体を包む各表面凸多角形に対し、三角形分割を施す（Ｔｒｉａｎｇｕｌａｔｉｏｎ  ａｌｇｏｒｉｔｈｍ）
２）前処理２：三角形を用いて第１の最接近点探索方法におけると同様に有向グラフ型構造データを作成する。
３）内積評価：（１５）′にしたがってｇＫ（νｋ）をにおける内積評価の範囲を限定する。
【００５７】
（ｂ）  本発明の第２の最接近点探索アルゴリズム
図９は本発明の第２の最接近点探索方法による最接近点探索アルゴリズムの流れ図である。
まず対象となる２つの凸多面体を特定するデータを入力する（初期入力：凸多面体の環境モデル設定）。各凸多面体を特定するデータは以下の方式で入力される（図５参照）。すなわち、第１の凸多面体ＰＨ１を構成する表面多角形に番号Ｐ１ｉ（ｉ＝１，２，・・・ｍ）を付ける。ついで、第ｉポリゴン番号Ｐ１ｉを入力し、しかる後、番号Ｐ１ｉのポリゴンを構成する格子点の座標値及びポリゴンの外向き法線方向を入力し、同様に、全ポリゴンＰ１ｉ（ｉ＝１，２，・・・ｍ）についてポリゴン番号、格子点座標値、外向き法線方向を入力する。なお、ポリゴンを構成する格子点の座標値は外向き法線ベクトルに向かって右回りに入力する。同様に、第２の凸多面体ＰＨ２を構成する表面多角形にポリゴン番号Ｐ２ｉ（ｉ＝１，２，・・・ｎ）を付ける。ついで、第ｉポリゴン番号Ｐ２ｉを入力し、しかる後、ポリゴン番号Ｐ２ｉを構成する格子点の座標値及びポリゴン番号Ｐ２ｉの外向き法線方向を入力し、全ポリゴンＰ２ｉ（ｉ＝１，２，・・・ｎ）についてポリゴン番号、格子点座標値、外向き法線方向を入力する（以上ステップ２０１）。
【００５８】
各凸多面体を特定するデータの入力が完了すると、入力データに基づいて凸多面体を構成する表面凸多角形を三角形に分割し、各三角形にポリゴン番号Ｔｉｊを付加する（ステップ２０２）。
ついで、得られた三角形をポリゴンノードとして第１最接近点探索方法におけると同様に有向グラフ型構造データを作成する（ステップ２０３）。
有向グラフ型構造のデータ作成が完了すると凸多面体ＰＨ１，ＰＨ２に対してＧｉｌｂｅｒｔ法を適用する。まず、初期格子点集合Ｖｋ（ｋ＝０）を決定し（ステップ２０４）、該初期格子点集合Ｖ０について最接近点ベクトルνｋを計算して出力する（ステップ２０５）。
【００５９】
ついで、最接近点ベクトルνｋに応じた各凸多面体上の最接近点を求め、それぞれの最接近点が格子点上、辺上、面上のいずれに存在するか調べ、存在位置に基づいて（１５）′により内積評価に使用する格子点を決定し、判定関数ｇＫ（νｋ）を演算する（ステップ２０６）。
判定関数が求まれば、ｇＫ（νｋ）＝０になったか調べ（ステップ２０７）、ｇＫ（νｋ）＝０であれば最接近点探索は終了する。しかし、ｇＫ（νｋ）が０でなければ、ｋをインクリメントし、次の格子点集合Ｖ１について最接近点ベクトルを出力する（ステップ２０８）。
以後ステップ１０５以降の処理を繰り返せば、最終的にｇＫ（νｋ）＝０となり、最接近距離、最接近点が求まる。尚、凸多面体ＰＨ１，ＰＨ２が移動すれば、所定時間毎の移動データに基づいて移動後の各凸多面体の格子点位置を求め、上記処理を行う。
【００６０】
（ｃ）  本発明の第２の最接近点探索装置の構成図
図１０は本発明の第２の最接近点探索方法を実現する装置の構成図であり、図６と同一部分には同一符号を付している。図６と異なる点は、
１）凸多面体を特定する凸多面体データに基づいて該凸多面体を構成する表面凸多角形を三角形に分割する三角形分割部１７が設けられている点、
２）有向グラフ型構造データ作成部１３は各三角形をポリゴンノードとして有向グラフ型構造データを作成して記憶部１４に記憶する点、
である。
【００６１】
（ｄ）  第２の最接近点探索方法の効果
第２の最接近点探索方法によれば、以下の１）、２）の効果が得られる。
１）高速性：最接近点を連続的に追い掛ける場合、初期化に要する時間を除くと対象凸多面体の複雑度に係らず計算負荷をほぼ一定にできる。一定値は、三角形ポリゴン同士の最接近点探索時間にほぼ等しい。
２）自由曲面への応用：自由曲面を三角形ポリゴンを張り合わせて表現する場合、表現の精度を上げるためにポリゴン数を増やしても最接近点探索の時間は常に一定である。
【００６２】
（Ｃ）  非凸多面体間の最接近点探索の第１の方法
（ａ）  原理
Ｇｉｌｂｅｒｔ法を非凸多面体に拡張するための基本的な方針は、非凸多面体を凸多面体の集合と捕らえた時に、干渉チェックを行わなければならない凸多面体の組み合わせ数をできるだけ減らすことである。凸多面体間の干渉チェックには勿論Ｇｉｌｂｅｒｔ法を採用する。
凸多面体数を減らすために複数の凸多面体に対してマージング（ｍｅｒｇｉｎｇ）という概念を導入する。物体Ａと物体Ｂのマージングとは、ＡとＢを含む最小の凸物体（Ｃｏｐｎｖｅｘ  ｈｕｌｌ：凸包）を構成することである。図１１は非凸多面体Ｋを２つの凸多面体Ａ，Ｂに分割し、マージング処理によりＡとＢを含む最小の凸物体（凸包）Ｃを構成した例である。凸包が生成されると、非凸多面体の干渉チェックは凸包同士（凸多面体同士）の干渉チェックに帰着し、本発明の第１の最接近点探索方法を適用できる。
【００６３】
凸包Ｃを構成するに当り、バーチャリティ（Ｖｉｒｔｕａｌｉｔｙ）という指標を導入する。バーチャリティは複数の凸多面体のマージングで生じる仮想的な多角形を識別するためのフラグである。図１１の例では、２つの実在する凸多面体（直方体）Ａ，Ｂにまたがる多角形（ポリゴン４，５，６）に対してバーチャリティは”１”となり、その他の実際に存在する多角形に対してはバーチャリティは”０”となる。
マージングで凸包が作成され、該凸包に第１の最接近点探索方法を適用するためには、凸包の有効グラフ型構造データを作成する。図１２は図１１に示す凸包の有向グラフ型構造データであり、凸包の表面多角形ポリゴン１，２，・・・をポリゴンノードとしてその下方に格子点ノード、エッジノードを配列し、更に各格子点ノード、エッジノードの下方にポリゴンノードを配列している。又、ポリゴンにはバーチャリティが付加されている。
【００６４】
（ｂ）  マージング  アルゴリズム
図１３はマージングアルゴリズムの流れ図である。
対象となる非凸多面体を２以上の凸多面体に分割し、各凸多面体を特定するデータを入力する（初期入力：凸多面体の環境モデル設定）。すなわち、第１の凸多面体ＰＨ１を構成する表面多角形にポリゴン番号Ｐ１ｉ（ｉ＝１，２，・・・ｍ）を付ける。ついで、第ｉポリゴン番号Ｐ１ｉを入力し、しかる後、ポリゴン番号Ｐ１ｉを構成する格子点の座標値及びポリゴン番号Ｐ１ｉの外向き法線方向を入力し、全ポリゴンＰ１ｉ（ｉ＝１，２，・・・ｍ）についてポリゴン番号、格子点座標値、外向き法線方向を入力する。以後、同様に、他の凸多面体ＰＨ２を構成する表面多角形にポリゴン番号Ｐ２ｉ（ｉ＝１，２，・・・ｎ）を付け、全ポリゴンＰ２ｉ（ｉ＝１，２，・・・ｎ）についてポリゴン番号、格子点座標値、外向き法線方向を入力する（以上ステップ３０１）。
【００６５】
各凸多面体を特定するデータの入力が完了すると、入力データに基づいて有向グラフ型構造のデータを作成する（ステップ３０２）。
ついで、各凸多面体ＰＨ１，ＰＨ２を包含する最小の凸包ＰＨ（１，２）を生成する（ステップ３０３）。しかる後、凸包ＰＨ（１，２）を構成する表面多角形にポリゴン番号ＰＰＨ（１，２）ｉ（ｉ＝１，２，・・・ｒ）を付け、第ｉポリゴン番号ＰＰＨ（１，２）ｉを入力後、第ｉポリゴンを構成する格子点の座標値、ポリゴンのバーチャリティ及び外向き法線方向を求めて記憶する（図１４参照）。以後、同様にして全ポリゴンＰＰＨ（１，２）ｉ（ｉ＝１，２，・・・ｒ）についてポリゴン番号、格子点座標値、バーチャリティ外向き法線方向を求めれば、凸包の有向グラフ型構造データが作成されてメモリに記憶されることになる。尚、ポリゴンＰＰＨ（１，２）ｉが凸多面体ＰＨ１，ＰＨ２の両方の格子点を含む場合にはバーチャリティは”１”になり、片方の格子点しか含まない場合にはバーチャリティは”０”になる（以上、ステップ３０４、３０５）。
【００６６】
マージングアルゴリズムは複数の凸多面体から凸包を作成し、有向グラフ型構造データを作成するアルゴリズムである。凸包を作成するアルゴリズムは計算幾何学で良く知られている。現在三次元の凸包に対しては、格子点の総数をＭとするとき、計算負荷がＯ（Ｍ・ｌｏｇ  Ｍ）のアルゴリズムが知られている。例えば、  Ｆ．Ｐ．  Ｐｒｅｐａｒａｔａ  ａｎｄ  Ｓ．Ｊ．  Ｈｏｎｇ，  ”Ｃｏｎｖｅｘ  ｈｕｌｌｓ  ｏｆ  ｆｉｎｉｔｅ  ｓｅｔｓ  ｏｆ  ｐｏｉｎｔｓ  ｉｎ  ｔｗｏ  ａｎｄ  ｔｈｒｅｅ  ｄｉｍｅｎｓｉｏｎｓ”，  Ｃｏｍｍ．  ＡＣＭ  ２（２０），  ｐｐ．８７〜９３，  １９７７を参照。
マージングアルゴリズムは相対的に静止している凸多面体同士に作用させ、バーチャリティ”１”の多角形が他の物体と接触・衝突した場合にはマージングを解除する。これにより、以後、下位の凸多面体の集合状態に対して最接近点探索処理が施される。又、マージング解除後（凸包解除後）、一定時間他の物体と干渉が生じない場合には、干渉によって分解した凸包はリカバリアルゴリズム（後述）により回復する。
【００６７】
（ｃ）  マージングアルゴリズムの起動
マージングアルゴリズムは、対象物体に対して初期設定においてオフライン的に作用させておき、環境が動的に変化しだしたならば、すなわち、環境中のある凸多面体が動き出したならば、マージングプロセスは現状を維持したまま一時的に停止して、干渉チェックを行う。そして、環境が停止した時、マージング処理を実行して環境変化後の凸包の作成、凸包の有向グラフ型構造データの作成を行う。
図１５は以上を考慮した時のプロセッサによるマージング処理の説明図である。全ての凸包に対して凸包の静動を監視するためのフラグｍｓ（ｉ）を用意する。静動フラグｍｓ（ｉ）＝”１”の場合は動、ｍｓ（ｉ）＝”０”の場合は静であり、ｉは凸包全てにわたる。
【００６８】
プロセッサのタスクとして、常時全てのｍｓ（ｉ）の値を監視して凸包の静動状態を監視する状態監視タスクＴａｓｋ１と、いずれかのｍｓ（ｉ）が”１”の場合に前述の第１の最接近点探索方法により干渉チェックをその他の処理を実行するＴａｓｋ２（干渉チェックタスク）と、全てのｍｓ（ｉ）＝”０”の場合、すなわち凸包全てが静止している場合にマージング処理を実行するＴａｓｋ３（マージングタスク）がある。
凸包全ての静動状態は図示しないロボット制御装置により監視され、メモリＭＥＭにｍｓ（ｉ）＝”１”あるいはｍｓ（ｉ）＝”０”として書き込まれる。状態監視タスクＴａｓｋ１はｍｓ（ｉ）の内容を監視し、全て”０”の場合にはマージングタスクＴａｓｋ３が起動してマージング処理を実行して凸包の作成、有向グラフ型構造データの作成を行う。マージングタスクＴａｓｋ３は凸包を１つ構成すると停止し、次の起動指示を待つ。一方、いずれかのｍｓ（ｉ）が”１”の場合には、換言すればいずれかの凸包が動いている場合には、干渉チェックタスクＴａｓｋ２は第１の最接近点探索方法により干渉チェックをその他の処理を実行する。以後、上記動作が繰り返されて干渉チェックが実行される。
【００６９】
以上はタスク切り換えによりマージング処理、干渉チェック処理等を実行する場合であるが、Ｗｈｉｌｅ文を用いてシーケンシャルにマージング処理を行うようにもできる。図１６はＷｈｉｌｅ文を用いてマージング処理を実行する場合の説明図である。Ｗｈｉｌｅ文において全ての凸包のｍｓ（ｉ）が”０”か監視し、全て”０”の場合にはマージングプロセスを実行して１つの凸包を作成する（ステップ４０１）。しかる後、Ｗｈｉｌｅ文を抜け出し、干渉チェックその他の処理を実行し（ステップ４０２）、再びＷｈｉｌｅ文を実行する。以後、常時マージング処理、干渉チェック処理を繰返し連続的に実行する。
【００７０】
環境が動的に変化する場合、例えば図１７に示すようにロボットアームＡＭが非凸多面体であるアーチＡＣを通り抜けて向う側の対象物ＯＢを掴むような場合、アームＡＭはアーチＡＣで構成される凸包を突き破って対象物ＯＢに到達する。この場合、ロボットアームＡＭが凸包のバーチャリティ”１”の凸多角形と接触すると、マージングが解除される。以後、ロボットアームＡＭとアーチＡＣを構成する個々の凸多面体ＡＣ１〜ＡＣ３との干渉チェックが行われ、ロボットアームはアーチＡＣに接触しないように対象物ＯＢに至り、該対象物を掴んで目的の場所に運ぶ。マージングが解除された凸包は、次に説明するリカバリアルゴリズムにより復元する。
図１８（ａ）は作業台ＢＳとアーチＡＣに凸包ＣＨ１を生成した例、図１８（ｂ）は、アーチＡＣ、対象物ＯＢそれぞれに凸包ＣＨ２，ＣＨ３を生成した場合の例であり、ロボットアームＡＭは図１８（ｃ）に示すように作業台ＢＳとアーチＡＣで構成される凸包ＣＨ１、アーチで構成される凸包ＣＨ２を次々に突き破って対象物ＯＢに到達し、対象物を把持して目的の場所に運ぶ。
【００７１】
（ｄ）  リカバリアルゴリズム
干渉によって分解した凸包は、一定時間、他の物体と干渉が生じない場合には回復する。リカバリ処理は、マージング状態のデータ構造が残っている凸包に対してのみ作用する。従って、相対位置関係が動いてしまい、元の凸包のデータ構造が失われている凸多面体集合は、リカバリ処理では回復せず、マージングアルゴリズムの適用により新しい凸包が構成される。
【００７２】
図１９はプロセッサによるマージング処理、リカバリ処理の説明図である。全ての凸包に対して凸包の静動を監視するためのフラグｍｓ（ｉ）を用意する。静動フラグｍｓ（ｉ）＝”１”の場合は動、ｍｓ（ｉ）＝”０”の場合は静であり、ｉは凸包全てにわたる。
プロセッサのタスクとして、常時全てのｍｓ（ｉ）の値を監視して凸包の静動状態を監視する状態監視タスクＴａｓｋ１と、いずれかのｍｓ（ｉ）が”１”の場合に第１の最接近点探索方法による干渉チェック処理、リカバリ処理、その他の処理を実行するＴａｓｋ２（干渉チェック／リカバリタスク）と、全てのｍｓ（ｉ）＝”０”の場合、すなわち凸包全てが静止している場合にマージング処理を実行するＴａｓｋ３（マージングタスク）がある。
【００７３】
凸包全ての静動状態は図示しないロボット制御装置により監視され、メモリＭＥＭにｍｓ（ｉ）＝”１”あるいはｍｓ（ｉ）＝”０”として書き込まれる。状態監視タスクＴａｓｋ１はｍｓ（ｉ）の内容を監視し、全て”０”の場合にはマージングタスクＴａｓｋ３が起動する。マージングタスクＴａｓｋ３はマージング処理を実行して凸包の作成、有向グラフ型構造データの作成を行う。マージングタスクＴａｓｋ３は凸包を１つ構成すると停止し、次の起動指示を待つ。
一方、いずれかのｍｓ（ｉ）が”１”の場合には、換言すればいずれかの凸包が動いている場合には、干渉チェックタスクＴａｓｋ２は第１の最接近点探索方法により干渉チェックを実行すると共に、リカバリ処理その他の処理を実行する。以後、上記動作が繰り返されて干渉チェックが実行される。
【００７４】
リカバリ処理は、凸包のバーチャリティ”１”の凸多角形が他の物体と接触してマージングが解除された時、凸包が該物体と干渉しなくなったか監視し、干渉しなくなってから連続して所定時間干渉しない場合には凸包を復元する。図１７の例では、ロボットアームＡＭが対象物ＯＢを把持してアーチＡＣを通り抜けると凸包とアームの干渉がなくなるから、干渉しなくなってから所定時間経過した時凸包を復元する。
【００７５】
以上はタスク切り換えによりリカバリ処理等を実行する場合であるが、Ｗｈｉｌｅ文を用いてシーケンシャルにリカバリ処理を行うようにもできる。図２０はＷｈｉｌｅ文を用いてリカバリ処理を実行する場合の説明図である。Ｗｈｉｌｅ文において全ての凸包のｍｓ（ｉ）が”０”か監視し、全て”０”の場合にはマージングプロセスを実行して１つの凸包を作成する（ステップ５０１）。しかる後、Ｗｈｉｌｅ文を抜け出し、干渉チェック処理、リカバリ処理、その他の処理を実行し（ステップ５０２）、再びＷｈｉｌｅ文を実行する。以後、常時マージング処理、干渉チェック処理、リカバリ処理を繰返し連続的に実行する。
【００７６】
（ｅ）  非凸多面体間の最接近点探索の全体の処理
図２１は非凸多面体間の最接近点探索の全体の処理フロー図である。
対象となる非凸多面体を特定するデータを入力する（初期入力：環境モデル設定）。・・・ステップ６０１
ついで、非凸多面体を凸多面体に分割し、各凸多面体ＰＨｉの有向グラフ型構造データを作成する。又、マージング処理により凸包を生成すると共に、凸包の有向グラフ型構造データを作成する（ステップ６０２）。
以上の初期化処理が終了すると第１の最接近点探索処理（干渉チェック）処理を実行する（ステップ６０３）。ついで、干渉するかチェックし（ステップ６０４）、干渉すればバーチャリティ＝”１”の部分が干渉したかチェックし（ステップ６０５）、バーチャリティ＝”０”であれば、ただちに移動を停止し（ステップ６０６）、バーチャリティ＝”１”であればマージングを解除し（ステップ６０７）、ステップ６０３に戻る。以後、凸包が回復するまで、非凸多面体を構成する個々の凸多面体に対する最接近点探索処理を実行する。
【００７７】
一方、ステップ６０４において、干渉していなければリカバリ処理を実行する（ステップ６０６）。リカバリ処理においては、マージングが解除された凸包が存在するか調べ、存在する場合には、他の物体と干渉しているかチェックし、干渉してなければ非干渉時間を計時する。そして、マージングが解除された凸包の非干渉時間が設定値以上になっていれば、該凸包を復元する。しかし、他の物体と干渉していたり、非干渉時間が設定値以上でない場合には凸包を復元せず次のステップを実行する。尚、凸包を構成する部分の相対位置関係が動いて元の凸包データが失われている場合には凸包の回復は行わない。
ついで、凸包の全ての部分が静止しているかチェック（ステップ６０９）、静止していない場合にはステップ６０３に戻り以降の処理を繰返し、静止している場合にはマージング処理を実行して新たな凸包を作成し（ステップ６１０）、以後ステップ６０３に戻り以降の処理を繰り返す。
【００７８】
（ｆ）  非凸多面体間の最接近点探索装置の構成
図２２は非凸多面体間の最接近点探索装置の構成図である。
２１は対象となる非凸多面体を特定するデータを入力する入力部、２２は入力された非凸多面体データを記憶する記憶部、２３は非凸多面体を複数の凸多面体に分割し、各凸多面体毎に有向グラフ型構造データを作成する凸多面体分割／有向グラフ作成部、２４は非凸多面体の凸包を作成し、該凸包の有向グラフ型構造データを作成する凸包作成／有向グラフ作成部、２５は各凸多面体の有向グラフ型構造データＣＶＤ及び凸包の有向グラフ型構造データＣＨＤを記憶する記憶部、２６は状態監視、干渉チェック、マージング、リカバリ処理を行うプロセッサ、２７はロボット制御装置から送られてくる静動フラグｍｓ（ｉ）や各物体の位置データを記憶するメモリ、２８は凸包のマージングが解除されているか否かを凸包毎に記憶するメモリである。
【００７９】
入力部２１より対象となる非凸多面体を特定するデータを入力してメモリ２２に記憶する。凸多面体分割／有向グラフ作成部２３は非凸多面体を凸多面体に分割し、各凸多面体の有向グラフ型構造データＣＶＤを作成してメモリ２５に記憶する。又、凸包作成／有向グラフ作成部２４はマージング処理により凸包を生成すると共に、凸包の有向グラフ型構造データＣＨＤを作成してメモリ２５に記憶する。
【００８０】
以上の初期化処理が終了するとプロセッサ２６は凸包の有向グラフ型構造データを用いて前述の第１の最接近点探索処理（干渉チェック）処理を実行する。尚、移動物体についてはロボット制御装置より入力されている移動データに基づいて格子点位置を算出し、該格子点位置に基づいて最接近点探索処理を行う。
最接近点探索処理により、凸包（バーチャリティ＝”１”）との干渉が検出されると、該凸包のマージングを解除し、解除フラグＦＲ＝”１”をメモリ２８に記憶する。以後、プロセッサ２６は解除フラグＦＲを参照して凸包が回復したか調べ、回復しなければ、非凸多面体を構成する個々の凸多面体の有向フラグ構造データを用いて最接近点探索処理を実行する。又、プロセッサ２６は、凸包（バーチャリティ＝”１”）と干渉していなければリカバリ処理を実行する。
【００８１】
リカバリ処理においては、解除フラグメモリ２８を参照してマージングが解除された凸包が存在するか調べ、存在する場合には、他の物体と干渉しているかチェックし、干渉してなければ非干渉時間Ｔを計時する。そして、マージングが解除された凸包の非干渉時間Ｔが設定値以上になっていれば、該凸包を復元する。すなわち、解除フラグＦＲを０にする。しかし、他の物体と干渉していたり、非干渉時間が設定値以上でない場合には凸包を復元しない。
ついで、ロボット制御装置から入力されている静止フラグｍｓ（ｉ）を参照して凸包の全てが静止しているかチェック、静止していない場合には上記干渉チェックを繰り返す。静止している場合、非凸多面体を構成する凸多面体の相対的位置関係が変化している場合にはマージング処理を実行して新たな凸包を作成してメモリ２５に記憶し、以後同様な処理を繰り返す。
【００８２】
以上より、本発明の非凸多面体間の最接近点探索方法によれば、凸包を作成し、凸包の有向グラフ型構造データを作成し、該凸包の有向グラフ型構造データに基づいて最接近点探索処理を行うようにしたから、凸多面体の組み合わせ数を大幅に減らすことができる。又、環境が動的に変化することによって凸包が崩壊した場合には、その後、一定時間、他の物体との干渉が生じなければ元の凸包を回復し、凸多面体の数を最小に保持でき、計算負荷を現象できる。
【００８３】
（Ｄ）  非凸多面体間の最接近点連続探索における第１の方法
（ａ）  原理
複数の非凸多面体間の最接近点を連続的に追い掛ける「最接近点の連続探索問題」において、各々の非凸多面体に対してマージング処理を施し、形式上凸多面体間の最接近点の連続問題にリダクションして解決する。このとき、マージングにより求めた各凸多面体に対し、凸多面体を構成する表面凸多角形に番号を付け、各々の凸多角形の近傍に位置する格子点、辺、凸多角形を登録するための有向グラフ型構造データを作成し、最接近点探索の計算負荷を表面多角形の格子点数の最大値のオーダＯ（Ｌ）以下に抑える。
マージングするに当たり、バーチャリティという指標を導入する。バーチャリティとは、マージングの過程で求まる凸多面体の表面多角形において、元の非凸多面体の表面多角形と一致する場合にはバーチャリティ＝０，一致しない場合にはバーチャリティ＝１とする。
【００８４】
バーチャリティ＝１の凸多角形との干渉が発生した場合には、マージングを解除し、元の非凸多面体を構成する凸多面体間の組み合わせに対して凸多面体における本発明の第１の最接近点探索方法を適用する。
マージングの解除に伴う規則は以下の通りとする。
１）バーチャリティ＝１の多角形（凸包Ａの成分）とバーチャリティ＝０の多角形（凸包Ｂの成分）が干渉したならば、バーチャリティ＝１の多角形を有する凸包Ａを解除する。
２）バーチャリティ＝１の多角形（凸包Ａの成分）とバーチャリティ＝１の多角形（凸包Ｂの成分）が干渉したならば、凸包を凸多面体に分解した時の構成凸多面体数の少ない方の凸包を解除する。
３）    バーチャリティ＝０の多角形同士が干渉した場合には、どちらの凸包も解除しない。
【００８５】
図２３に示すように、凸包Ａと凸包Ｂが干渉し（（ｂ）参照）、凸包Ａが解除されて構成凸多面体の集合ＤＡ（Ｄｅｃｏｍｐｏｓｅｄ  Ａ）が現われれば（（ｃ）参照）、以後、集合ＤＡと凸包Ｂ間で凸多面体における本発明の第１の最接近点探索方法を適用する。この場合のアルゴリズムは以下のようになる。
（ｂ）  凸多面体集合と凸包間の最接近点探索アルゴリズム
１）凸包Ａが解除された時の凸包Ａの干渉面をＰＡ（Ｖｉｒｔｕａｌｉｔｙ（ＰＡ）＝１）とする。この時、干渉面ＰＡの各辺は集合ＤＡの要素  Ｅｄｇｅ（ＤＡ，ＰＡ）とバーチャリティ＝１の辺で構成され、干渉面ＰＡの格子点は集合ＤＡの要素  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）で構成される。
【００８６】
２）構成凸多面体の集合ＤＡと凸包Ｂ間の干渉チェックは、  Ｅｄｇｅ（ＤＡ，ＰＡ）、  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）と凸包Ｂ間に凸多面体における本発明の第１の最接近点探索方法を適用することにより行う。すなわち、  Ｅｄｇｅ（ＤＡ，ＰＡ）、  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）を含むＤＡの表面凸多角形（（ｃ）の斜線部参照）を、非凸多面体を構成する各凸多面体（Ａ′、Ａ″）の有向グラフ型構造データより検索する。ついで、それぞれより求めた表面多角形と凸包Ｂ間に並行して第１の最接近点探索方法を適用して干渉チェックを行う（（ｄ）参照）。
３）バーチャリティ＝１の凸多角形との干渉状態から抜け出せば、リカバリ処理により解除した凸包を回復し、凸包に対して最接近点探索処理を施す（（ｅ）参照）。
２）の処理により、最接近点探索の対象となる凸多面体Ａ′、Ａ″の面数を少なくでき（凸多面体Ａ′では１面、凸多面体Ａ″では２面）、最接近点探索処理の計算負荷を軽減できる。
【００８７】
（ｃ）  最接近点連続探索処理のフロー
図２４は非凸多面体間の最接近点連続探索処理の処理フロー図である。
対象となる非凸多面体を特定するデータを入力する（初期入力：環境モデル設定）。・・・ステップ７０１
ついで、非凸多面体を凸多面体に分割し、各凸多面体ＰＨｉの有向グラフ型構造データを作成する。又、マージング処理により凸包を生成すると共に、凸包の有向グラフ型構造データを作成する（ステップ７０２）。
以上の初期化処理が終了すると凸多面体における本発明の第１の最接近点探索処理（干渉チェック）を実行する（ステップ７０３）。ついで、干渉するかチェックし（ステップ７０４）、干渉すればバーチャリティ＝０の多角形同士が干渉したかチェックし（ステップ７０５）、ＹＥＳであれば、どちらの凸包も解除せず処理を停止し、次の指示を待つ。しかし、バーチャリティ＝０の多角形同士の干渉でなければ、バーチャリティ＝１の多角形（凸包Ａの成分）とバーチャリティ＝０の多角形（凸包Ｂの成分）が干渉したかチェックする（ステップ７０６）。
【００８８】
ＹＥＳであればバーチャリティ＝１の多角形を有する凸包Ａを解除する（ステップ７０７）。ＮＯであれば、換言すれば、バーチャリティ＝１の多角形（凸包Ａの成分）とバーチャリティ＝１の多角形（凸包Ｂの成分）が干渉したならば、凸包を凸多面体に分解した時の構成凸多面体数の少ない方の凸包を求め（ステップ７０８）、該凸包を解除する（ステップ７０７）。
ついで、干渉面ＰＡの  Ｅｄｇｅ（ＤＡ，ＰＡ）、  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）を含む集合ＤＡの表面凸多角形を各凸多面体の有向グラフ型構造データより検索してプロセッサに渡す（ステップ７０９）。以後、プロセッサは求めた表面多角形と凸包Ｂ間に並行して第１の最接近点探索方法を適用して干渉チェックを行う（ステップ７０３）。
【００８９】
一方、ステップ７０４において、物体間が干渉していなければリカバリ処理を実行する（ステップ７１０）。
リカバリ処理においては、マージングが解除された凸包が存在するか調べ、存在する場合には、他の物体と干渉しているかチェックし、干渉してなければ非干渉時間を計時する。そして、マージングが解除された凸包の非干渉時間が設定値以上になっていれば、該凸包を復元する。しかし、他の物体と干渉していたり、非干渉時間が設定値以上でない場合には凸包を復元せず次のステップを実行する。以後ステップ７０３に戻り以降の処理を繰り返す。
ついで、凸包の全ての部分が静止しているかチェック（ステップ７１１）、静止していない場合にはステップ７０３に戻り以降の処理を繰返し、静止している場合にはマージング処理を実行して新たな凸包を作成し（ステップ７１２）、以後ステップ７０３に戻り以降の処理を繰り返す。
【００９０】
（Ｅ）  非凸多面体間の最接近点連続探索における第２の方法
（ａ）  原理
複数の非凸多面体間の最接近点を連続的に追い掛ける「最接近点の連続探索問題」において、各々の非凸多面体に対してマージング処理を施し、形式上凸多面体間の最接近点の連続問題にリダクションして解決する。このとき、本発明の第２の最接近点探索方法を適用する。すなわち、マージングにより求めた各凸多面体に対し、凸多面体を包む各表面凸多角形に三角形分割（Ｔｒｉａｎｇｕｌａｔｉｏｎ）を施し、三角形分割した結果に対して有向グラフ型のデータ構造を取り、最接近点探索の計算負荷を対象凸多面体の複雑度に関係せずに一定に抑える。
マージングするに当たり、バーチャリティという指標を導入する。バーチャリティとは、マージングの過程で求まる凸多面体の表面多角形において、元の非凸多面体の表面多角形と一致する場合にはバーチャリティ＝０，一致しない場合にはバーチャリティ＝１とする。
【００９１】
バーチャリティ＝１の三角形ポリゴンとの干渉が発生した場合には、マージングを解除し（凸包の解除）、元の非凸多面体を構成する凸多面体間の組み合わせに対して本発明の第２の最接近点探索方法を適用する。
マージングの解除に伴う規則は以下の通りとする。
１）バーチャリティ＝１の三角形ポリゴン（凸包Ａの成分）とバーチャリティ＝０の三角形ポリゴン（凸包Ｂの成分）が干渉したならば、バーチャリティ＝１の三角形ポリゴンを有する凸包Ａを解除する。
２）バーチャリティ＝１の三角形ポリゴン（凸包Ａの成分）とバーチャリティ＝１の三角形ポリゴン（凸包Ｂの成分）が干渉したならば、凸包を凸多面体に分解した時の構成凸多面体数の少ない方の凸包を解除する。
３）バーチャリティ＝０の三角形ポリゴン同士が干渉した場合には、どちらの凸包も解除しない。
【００９２】
図２５に示すように、凸包Ａと凸包Ｂが干渉し（（ｂ）参照）、凸包Ａが解除されて構成凸多面体の集合ＤＡ（Ｄｅｃｏｍｐｏｓｅｄ  Ａ）が現われれば（（ｃ）参照）、以後、集合ＤＡと凸包Ｂ間で凸多面体における本発明の第２の最接近点探索方法を適用する。この場合のアルゴリズムは以下のようになる。
１）凸包Ａが解除された時の凸包Ａの干渉三角形ポリゴンをＴＡ（Ｖｉｒｔｕａｌｉｔｙ（ＴＡ）＝１）とする。この時、干渉三角形ポリゴンＴＡの各辺は集合ＤＡの要素  Ｅｄｇｅ（ＤＡ，ＰＡ）とバーチャリティ＝１の辺で構成され、干渉三角形ポリゴンＴＡの格子点は集合ＤＡの要素  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）で構成される。
【００９３】
２）構成凸多面体の集合ＤＡと凸包Ｂ間の干渉チェックは、  Ｅｄｇｅ（ＤＡ，ＰＡ）、  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）と凸包Ｂ間に凸多面体における本発明の第２の最接近点探索方法を適用することにより行う。すなわち、  Ｅｄｇｅ（ＤＡ，ＰＡ）、  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）を含むＤＡの三角形ポリゴン（（ｃ）の斜線部参照）を、非凸多面体を構成する各凸多面体（Ａ′、Ａ″）の有向グラフ構造データより検索する。ついで、それぞれより求めた三角形ポリゴンと凸包Ｂ間に並行して第２の最接近点探索方法を適用して干渉チェックを行う（（ｄ）参照）。
３）バーチャリティ＝１の三角形ポリゴンとの干渉状態から抜け出せば、リカバリ処理により解除した凸包を回復し、凸包に対して最接近点探索処理を施す（（ｅ））。
２）の処理により、最接近点探索の対象となる凸多面体Ａ′、Ａ″の三角形ポリゴン数を少なくでき（凸多面体Ａ′、Ａ″でそれぞれ２個）、最接近点探索処理の計算負荷を軽減できる。
【００９４】
（ｂ）  非凸多面体間の最接近点連続探索処理
図２６は非凸多面体間の第２の最接近点連続探索処理のフロー図である。
対象となる非凸多面体を特定するデータを入力する（初期入力：環境モデル設定）。・・・ステップ８０１
ついで、非凸多面体を凸多面体に分割し、各凸多面体ＰＨｉに対して三角形分割を行い、しかる後、各凸多面体の有向グラフ型構造データを作成する。又、マージング処理により凸包を生成すると共に、凸包の有向グラフ型構造データを作成する（ステップ８０２）。
【００９５】
以上の初期化処理が終了すると非凸多面体間の第２の最接近点探索処理（干渉チェック）を実行する（ステップ８０３）。干渉するかチェックし（ステップ８０４）、干渉すればバーチャリティ＝０の三角形ポリゴン同士が干渉したかチェックし（ステップ８０５）、ＹＥＳであれば、どちらの凸包も解除せず処理を停止し、次の指示を待つ。しかし、バーチャリティ＝０の三角形ポリゴン同士の干渉でなければ、バーチャリティ＝１の三角形ポリゴン（凸包Ａの成分）とバーチャリティ＝０の三角形ポリゴン（凸包Ｂの成分）が干渉したかチェックする（ステップ８０６）。
ＹＥＳであればバーチャリティ＝１の三角形ポリゴンを有する凸包Ａを解除する（ステップ８０７）。ＮＯであれば、換言すれば、バーチャリティ＝１の三角形ポリゴン（凸包Ａの成分）とバーチャリティ＝１の三角形ポリゴン（凸包Ｂの成分）が干渉したならば、凸包を凸多面体に分解した時の構成凸多面体数の少ない方の凸包を求め（ステップ８０８）、該凸包を解除する（ステップ８０７）。
【００９６】
ついで、干渉三角形ポリゴンＴＡの  Ｅｄｇｅ（ＤＡ，ＰＡ）、  Ｖｅｒｔｅｘ（ＤＡ，ＰＡ）を含む集合ＤＡの三角形ポリゴンを各凸多面体の有向グラフ構造データより検索してプロセッサに渡す（ステップ８０９）。以後、プロセッサは求めた三角形ポリゴンと凸包Ｂ間に並行して第２の最接近点探索方法を適用して干渉チェックを行う（ステップ８０３）。
一方、ステップ８０４において、物体間が干渉していなければリカバリ処理を実行する（ステップ８１０）。
【００９７】
リカバリ処理においては、マージングが解除された凸包が存在するか調べ、存在する場合には、他の物体と干渉しているかチェックし、干渉してなければ非干渉時間を計時する。そして、マージングが解除された凸包の非干渉時間が設定値以上になっていれば、該凸包を復元する。しかし、他の物体と干渉していたり、非干渉時間が設定値以上でない場合には凸包を復元せず次のステップを実行する。    ついで、凸包の全ての部分が静止しているかチェック（ステップ８１１）、静止していない場合にはステップ８０３に戻り以降の処理を繰返し、静止している場合にはマージング処理を実行して新たな凸包を作成し（ステップ８１２）、以後ステップ８０３に戻り以降の処理を繰り返す。
【００９８】
（Ｆ）非凸多面体の凸多面体への第１の分解処理（前処理）
（ａ）  システムの構成
非凸多面体間の最接近点探索を実行するためには非凸多面体を凸多面体に分解する必要がある。
図２７はグラフィックワークステーション上の形状モデルに最接近点探索の前処理を施す場合におけるシステム構成図であり、ＧＷＳはグラフィックワークステーション、ＣＰＵは最接近点探索の前処理や最接近点探索処理、その他の処理を実行するプロセッサ、ＭＥＭはメモリであり、図示しない三次元ＣＡＤシステムで設計された形状データＦＤＴや最接近点探索の前処理プログラムＩＣＰ等を記憶するもの、ＤＰＬは表示部、ＯＰＳはキーボード、マウス等の操作部、ＯＰＲはオペレータである。
オペレータＯＰＲは、操作部ＯＰＳを使ってプロセッサＣＰＵに対しグラフィックワークステーションＧＷＳ上の形状モデルに対して前処理を実行するように指令を入力する。前処理指令が入力されると、プロセッサＣＰＵはメモリＭＥＭに記憶されている最接近点探索の前処理プログラムＩＣＰに基づいて非凸多面体の形状データＦＤＴを用いて前処理（非凸多面体のポリゴン集合の分割処理）を実行する。そして、分割結果をメモリＭＥＭに記憶すると共に、前処理結果を表示部ＤＰＬを通してオペレータに提示する。
【００９９】
（ｂ）  最接近点探索の前処理の概略
図２８は本発明の最接近点探索の前処理の概略的な処理フローである。
三次元ＣＡＤシステムは形状モデル（非凸多面体）を作成してグラフィックワークステップＧＷＳに入力する（ステップ１００１、１００２）。ＣＡＤシステムは物体（非凸多面体）をポリゴンで覆った場合における全ポリゴンデータを入力する。ポリゴンデータは、ポリゴンの各頂点の座標値とその点における光の反射方向を示す情報を有している。最も一般的なポリゴンデータは、図２８に示すように三角形ポリゴンの張り合わせで表現されるものである。図２８に示す三角形ポリゴンのデータの場合、ｎｏｒｍａｌ  に続く３つの実数が光の反射方向を示し、ｖｅｒｔｅｘ  に続く３つの実数が頂点座標値を表している。三次元ＣＡＤシステム内の形状モデルからポリゴンデータを出力する手順は通常、三次元ＣＡＤシステム内に用意されている。
ついで、分割統治法による凸分解基本アルゴリズムに従って、上記ポリゴンデータを凸要素毎に分割されたポリゴンデータの組（ポリゴン部分集合）に分ける。すなわち、初期のポリゴンデータ（非凸多面体のポリゴン集合）を凸要素毎の部分集合の組に分割して出力する（ステップ１００３，１００４）。しかる後、各部分集合毎に凸多面体を生成する。尚、ポリゴンの各形状は一般的に任意であるが、各ポリゴンは凸性を満たしているものとする。
【０１００】
（ｃ）  分割統治法による凸分解基本アルゴリズム
図２９は分割統治法による凸分解基本アルゴリズムのフロー図である。
初期ポリゴン集合（非凸多面体のポリゴン集合）Ｐを入力し（ステップ１１０１）、ついで、初期ポリゴン集合Ｐに対して分割統治法による処理を施す（ステップ１１０２）。すなわち、初期ポリゴン集合Ｐを第１、第２の２つのグループに分割し、各グループにおいて隣接ポリゴンとの関係が凸であるポリゴン部分集合を求める。ついで、共通の境界稜線を有する第１グループのポリゴン部分集合と第２グループのポリゴン部分集合とが凸関係にあるものを併合して凸要素毎の複数の新たなポリゴン部分集合ＤＰ１，ＤＰ２，・・・を求める。
しかる後、ポリゴン部分集合ＤＰ１，ＤＰ２，・・・を出力する（ステップ１１０３）。
【０１０１】
以下は、分割統治法の詳細のプログラム例である。
0003556644.tif 000004
上記アルゴリズムから判るとおり、分割統治法では、分割と統治の過程が再起的に繰り返される。分割統治法において問題依存性が存在する最も重要な個所は、「併合」過程、すなわち、関数Ｍｅｒｇｅの構成方法である。
【０１０２】
（ｄ）  分割統治法におけるＭｅｒｇｅプロセス
図３０は分割統治法におけるＭｅｒｇｅプロセスの流れ図である。
１）  凸要素集合ＤＣ（ＰＬ），ＤＣ（ＰＨ）を用意する（ステップ１１１１ａ，１１１１ｂ）。凸要素集合ＤＣ（ＰＬ），ＤＣ（ＰＨ）の各要素は、図３０のＣＬｉ，ＣＨｊで示されるようにその要素を構成するポリゴンの集合（ｐｏｌｙｇｏｎｓ）とその要素の境界をなす境界稜線の集合（ｂｏｕｎｄａｒｙ  ｅｄｇｅｓ）で構成される。
２）  Ｍｅｒｇｅ  可能性の判定
凸要素ＣＬｉ，ＣＨｊが互いにＭｅｒｇｅ可能か否かを判定する（ステップ１１１２）。判定条件は以下の通りである。
条件１：凸要素ＣＬｉ，ＣＨｊで共有している境界稜線を全て取り出す。共有しているか否かは、境界稜線を構成するポリゴン辺の中点を比較することにより判定できる。共有している境界稜線が１本もなければＭｅｒｇｅ不可能と判定する。
条件２：共有している境界稜線に対し、その稜線を共有するＣＬｉのポリゴンとＣＨｊのポリゴン間の凹凸関係を調べる。１組でも凹の関係にあるポリゴンの組合せが存在すれば、Ｍｅｒｇｅ不可能と判定する。
条件３：条件１、条件２をクリアした場合、すなわち、境界稜線を共有するポリゴンの全組合せにおいてポリゴン間が凸の関係にある時はＭｅｒｅｇｅ可能と判定する。
【０１０３】
３）  Ｍｅｒｇｅの順序
凸要素のＭｅｒｇｅは以下の順序で行なう。
３−１）  凸要素ＣＬ１がＣＨｊ（ｊ＝１，２，・・・ＮＰＨ）とＭｅｒｇｅ可能か否かを判定する。もし、ＣＬ１がＣＨｊとＭｅｒｇｅ可能であれば、それ以降は、ＣＬ１，ＤＣ（ＰＨ）を以下のようにする。
0003556644.tif 000005
３−２）  ＣＬｉ（ｉ＝２，３，・・・ＮＰＬ）に対して同様の手順を実行する。
４）  併合凸要素集合ＤＣ（Ｐ）の構成
上記３）のプロセスにより
併合凸要素集合ＤＣ（Ｐ）＝Ｍｅｒｇｅ  （ＤＣ（ＰＬ），ＤＣ（ＰＨ））
が実行され、
ＤＣ（Ｐ）＝｛ＣＬ１，ＣＬ２，・・・ＣＬＰＮＰＬ，ＣＨｊ′，ＣＨｊ″・・・｝
で与えられる併合凸要素集合ＤＣ（Ｐ）が出力される（ステップ１１１３）。ここで、｛ＣＨｊ′，ＣＨｊ″・・・｝は、いかなるＣＬｉともＭｅｒｇｅしないＤＣ（ＰＨ）の凸要素である。
【０１０４】
（ｅ）  ポリゴン間の凹凸関係の判定
図３１はポリゴン間の凹凸関係判定処理の説明図である。図３１（ａ）に示すように１本の境界稜線ＢＥＧを共有する２枚のポリゴンＡ，Ｂを想定する。ポリゴンの相対的位置関係は、互いに離れているか、図３１（ａ）のように稜線を介して接しているかのどちらかであって、それ以外の関係（例えば、稜線以外の部分で交わっている等）はないものとする。
図３１（ａ）において、ベクトルｂ，ｃは、それぞれポリゴンＢ，ポリゴンＡの重心ｐ，ｑから境界稜線ｘ１−ｘ０＝ａに降ろした垂線ベクトルである。又、ベクトルａ，ｂ，ｃを単位化したものをそれぞれｅ０，ｅ１，ｅ２とする。ｎＡ，ｎＢは、それぞれポリゴンＡ、ポリゴンＢの外向き法線ベクトル（ポリゴンを定義する各格子点における光の反射方向の平均とする）を表す。この時、ｂ，ｃ，ｅ０，ｅ１，ｅ２は次式で与えられる。
【０１０５】
0003556644.tif 000006
ポリゴンＡ、ポリゴンＢの凹凸関係を判定するため、図６（ｂ）のようにベクトルｂがＸ０軸と一致するように座標変換を行なう。この時の変換行列は次式
【数１】
0003556644.tif 000007
で与えられる。
【０１０６】
法線ベクトルｎＢの向きにより、次の２通りの条件のどちらかを満たせば、ポリゴンＡ，ポリゴンＢは凸の関係にあるといえる。すなわち、
１）  （ｅ０×ｅ１）・ｎＢ＞０の場合
［Ｔ・ｃ］Ｚ＜０
であり、かつ、
（ｅ１×ｅ２）・ｎＡ＞０を満たす時、
２）  （ｅ０×ｅ１）・ｎＢ≦０の場合
［Ｔ・ｃ］Ｚ≧０
であり、かつ、
（ｅ１×ｅ２）・ｎＡ≦０を満たす時、
ポリゴンＡ，ポリゴンＢは凸の関係にあるといえる。実際のＣＡＤデータを扱う場合には、誤差を考慮して判定条件は以下のようになる。
【０１０７】
１）  （ｅ０×ｅ１）・ｎＢ＞０の場合
［Ｔ・ｃ］Ｚ＜ε
であり、かつ、
（ｅ１×ｅ２）・ｎＡ＞−εを満たす時、
２）  （ｅ０×ｅ１）・ｎＢ≦０の場合
［Ｔ・ｃ］Ｚ≧−ε
であり、かつ、
（ｅ１×ｅ２）・ｎＡ≦εを満たす時、
ポリゴンＡ，ポリゴンＢは凸の関係にある。ここで、εは扱う対象によって決める微少量である。
分割統治法で得られるポリゴン部分集合の集合ＤＣ（Ｐ）の各要素は、実は凸とは限らない。図３１に示した凹凸判定条件は、局所的条件である。しかしながら、図３１に示した条件のもとに初期のポリゴン集合を分割すると、多くの場合において非常によい凸性を示す。
【０１０８】
（Ｇ）凸多面体への分解処理の第２実施例（前処理）
分割統治法による基本アルゴリズムによって凸分解を行なう場合、分解したあとの凸要素数は最少とは限らない。第２実施例では、凸分解基本アルゴリズムを繰り返して使用することにより、凸要素数を最適化する（できるだけ少なくする）ものである。第２実施例の最適化法は厳密な意味で凸要素数を最小化する分けではなく、あくまでも限られた時間内で、できるだけ要素数を減らす手法である。
図３２は第２実施例（最適化法）の処理の流れ図である。
三次元ＣＡＤシステム等から初期ポリゴン集合（非凸多面体のポリゴン集合）Ｐを入力し（ステップ１２０１）、ついで、初期ポリゴン集合Ｐに対して分割統治法による凸分解基本アルゴリズムを適用する（ステップ１２０２）。すなわち、初期ポリゴン集合Ｐを第１、第２の２つのグループに分割し、各グループにおいて隣接ポリゴンとの関係が凸であるポリゴン部分集合を求める。ついで、共通の境界稜線を有する第１グループのポリゴン部分集合と第２グループのポリゴン部分集合とが凸関係にあるものを併合して凸要素毎の複数の新たなポリゴン部分集合ＤＰ１，ＤＰ２，・・・を求める。
【０１０９】
しかる後、ポリゴン部分集合ＤＰ１，ＤＰ２，・・・を要素とする凸要素集合ＤＣ（Ｐ）を出力する（ステップ１２０３）。尚、凸要素数はＮＤＣ（Ｐ）である。
ついで、凸要素集合ＤＣ（Ｐ）に再度分割統治法による凸分解基本アルゴリズムを適用する（ステップ１２０４）。すなわち、凸要素集合ＤＣ（Ｐ）を構成する複数のポリゴン部分集合を第１、第２のグループに分割し、各グループにおいて隣接ポリゴンとの関係が凸であるポリゴンの部分集合を求め、共通の境界稜線を有する第１グループのポリゴン部分集合と第２グループのポリゴン部分集合とが凸関係にあるものを併合して複数の新たなポリゴン部分集合ＤＤＰ１，ＤＤＰ２，・・・を求める。
しかる後、ポリゴン部分集合ＤＤＰ１，ＤＤＰ２，・・・を要素とする凸要素集合ＤＣ（ＤＣ（Ｐ））を出力する（ステップ１２０５）。尚、凸要素数はＮＤＤＣ（Ｐ）である。
【０１１０】
ついで、前回に求めたポリゴン部分集合の数ＮＤＣ（Ｐ）と今回求めたポリゴン部分集合の数ＮＤＤＣ（Ｐ）を比較し（ステップ１２０６）、一致すれば、凸要素集合ＤＣ（ＤＣ（Ｐ））を最終的に出力する（ステップ１２０７）。そして、この凸要素集合ＤＣ（ＤＣ（Ｐ））を構成するポリゴン部分集合を用いて凸多面体を生成することになる
一方、ＮＤＤＣ（Ｐ）とＮＤＣ（Ｐ）が等しくない場合には（例えば、ＮＤＤＣ（Ｐ）＜ＮＤＣ（Ｐ））、ＤＣ（ＤＣ（Ｐ））→ＤＣ（Ｐ）とし（ステップ１２０８）、以後、ステップ１２０４以降の処理を繰り返す。すなわち、新たに求めた複数のポリゴン部分集合ＤＣ（ＤＣ（Ｐ））に対して分割統治法による凸分解処理を繰返し施す。最適化法では、凸要素数がこれ以上減らなくなるまで凸分解基本アルゴリズムを出力ＤＣ（Ｐ）に対して繰返し作用させる。
【０１１１】
（Ｈ）凸多面体への分解処理の第３実施例（前処理）
分割統治法による基本アルゴリズムを用いる方法では、穴等の認識において分割した凸要素数が予想以上に増える可能性がある。第３実施例では、凸要素数を減少するために、穴等の物体に対してブール代数を負とみなして凸分解処理を行ない、その他の正物体に対して第１実施例の凸分解処理を施すものである。
ブール代数を負とみなすとは、端的に各ポリゴンの法線方向の符号を反転（法線方向を逆転）することである。通常の分割統治法による基本アルゴリズムと負物体認識法とを組み合わせることにより、凸要素数の少ない凸分解が可能となる。
図３３は穴等の形状（負物体）を含む物体のブール集合演算による物体表現法の説明図である。ＨＬは穴、ＨＬ′は法線方向を逆転した穴部、ＢＤＹは穴のない物体（穴なし物体）である。穴付き物体は穴なし物体ＢＤＹから法線方向を逆転した穴部分を差し引くことにより表現される。
【０１１２】
図３４は第３実施例の凸分解処理の流れ図、図３５はその凸分解結果の説明図である。
三次元ＣＡＤシステム等から初期ポリゴン集合（非凸多面体のポリゴン集合）Ｐを入力し（ステップ１３０１）、ついで、初期ポリゴン集合Ｐの法線方向を全て逆転したポリゴン集合ＰＢを作る（ステップ１３０２）。しかる後、ポリゴン集合ＰＢに対して凸分解基本アルゴリズムを適用する（ステップ１３０３）。すなわち、ポリゴン集合ＰＢを第１、第２の２つのグループに分割し、各グループにおいて隣接ポリゴンとの関係が凸であるポリゴン部分集合を求める。ついで、共通の境界稜線を有する第１グループのポリゴン部分集合と第２グループのポリゴン部分集合とが凸関係にあるものを併合して凸要素毎の複数の新たなポリゴン部分集合を求める。
【０１１３】
しかる後、該複数のポリゴン部分集合を要素とする凸要素集合ＤＣ（ＰＢ）（図３５参照）を出力し、又、凸要素集合ＤＣ（ＰＢ）の各凸要素において、ポリゴン数が２以上で構成される凸要素を取りだし、それらの凸要素を構成する全てのポリゴン集合をＰ２（ＤＣ（ＰＢ））とする。すなわち、穴等の負物体凸要素を構成するポリゴンを集めてＰ２（ＤＣ（ＰＢ））とする（ステップ１３０４）。
ついで、初期ポリゴン集合ＰとＰ２（ＤＣ（ＰＢ））の差集合を取り、正物体を構成するポリゴン集合Ｐ−Ｐ２（ＤＣ（ＰＢ））を求める（ステップ１３０５）。正物体を構成するポリゴン集合（差集合）が求まれば、該差集合Ｐ−Ｐ２（ＤＣ（ＰＢ））に対して分割統治法による凸分解基本アルゴリズムを適用する（ステップ１３０６）。すなわち、差集合Ｐ−Ｐ２（ＤＣ（ＰＢ））を第１、第２の２つのグループに分割し、各グループにおいて隣接ポリゴンとの関係が凸であるポリゴン部分集合を求める。ついで、共通の境界稜線を有する第１グループのポリゴン部分集合と第２グループのポリゴン部分集合とが凸関係にあるものを併合して凸要素毎の複数の新たなポリゴン部分集合を求める。
しかる後、該複数のポリゴン部分集合を要素とする凸要素集合ＤＣ（Ｐ−Ｐ２（ＤＣ（ＰＢ）））を出力し（ステップ１３０７、図３５）、正物体の認識を行なう。
最後に、ＤＣ（Ｐ−Ｐ２（ＤＣ（ＰＢ）））を正物体の凸要素、ＤＣ（ＰＢ）を負物体の凸要素として出力する（ステップ１３０８）。以後、各凸要素のポリゴン部分集合を用いて凸多面体が生成されることになる。
【０１１４】
（Ｉ）凸多面体への分解処理の第４実施例（前処理）
凸分解の第１実施例に最適化法を施すことにより凸要素数を減少したのと同様に、第３実施例に最適化法を施して凸要素数を減少することができる。
図３６はかかる場合の凸分解処理の流れ図であり、第３実施例と異なる点は、ステップ１３０３′、１３０６′において凸分解基本アルゴリズムの替わりに最適化法を適用した点である。
【０１１５】
（Ｊ）凸多面体への分解処理の第５実施例（前処理）
（ａ）  考察
以上の実施例では、第１グループのポリゴン部分集合ＣＬｉと第２グループのポリゴン部分集合ＣＨｊのＭｅｒｇｅ可能性を以下のように判定している。すなわち、ポリゴン部分集合ＣＬｉとポリゴン部分集合ＣＨｊが共通稜線を有しているのか、いないのかに関係なく、ＣＬｉの境界稜線を構成する全ポリゴン辺とＣＨｊの境界稜線を構成する全ポリゴン辺の中点が一致するか否かにより共通の境界稜線を求めている。
【０１１６】
しかし、かかるＭｅｒｇｅ可能性の判定処理では、あらゆるポリゴン部分集合の組合せにおいて、しかも、境界稜線を構成するポリゴン辺の総当たり的な組合せにおいて中点が一致するか否かを調べなくてはならないため、Ｍｅｒｇｅ可能性の判定処理に相当の時間を要し、凸分解の高速化に限界を与えている。
ところで、凸要素ＣＬｉの境界稜線と凸要素ＣＨｊの境界稜線が共通の境界稜線部分を有する場合には、凸要素ＣＬｉの境界稜線で構成する凸物体と凸要素ＣＨｊの境界稜線で構成する凸物体とが干渉する。そこで、凸要素ＣＬｉ，ＣＬｊの共通の境界稜線を求める処理を実行する前に、計算負荷がＯ（Ｎ）の干渉チェック法により凸要素ＣＬｉの境界稜線で構成する凸物体と凸要素ＣＨｊの境界稜線で構成する凸物体とが干渉するかチェックする。そして、干渉しない場合には以降のｍｅｒｇｅ処理をスキップし、干渉する場合のみ以降のＭｅｒｇｅ処理を継続するようにする。このようにすれば、Ｍｅｒｇｅ処理に要する時間を大幅に短縮でき凸分解処理を高速に行なうことができる。
【０１１７】
（ｂ）  干渉チェック前処理の概略
図３７は第５実施例の干渉チェック前処理の別の概略的処理フローであり、図３の第１実施例と同一部分には同一符号を付している。第１実施例と異なる点は、ステップ１００３′において、分割統治法による凸分解基本アルゴリズムに替えて干渉チェック組込型の分割統治法による凸分解基本アルゴリズム（高速凸分解基本アルゴリズム）を適用している点である。
【０１１８】
図３８は高速凸分解基本アルゴリズムの処理のフローである。
初期ポリゴン集合（非凸多面体のポリゴン集合）Ｐを入力し（ステップ１１０１）、ついで、初期ポリゴン集合Ｐに対して高速凸分解アルゴリズムによる凸分解処理を施す（ステップ１１０２′）。すなわち、初期ポリゴン集合Ｐを第１、第２の２つのグループに分割し、各グループにおいて隣接ポリゴンとの関係が凸であるポリゴン部分集合を求める。ついで、共通の境界稜線を有する第１グループのポリゴン部分集合と第２グループのポリゴン部分集合とが凸関係にあるものを併合（マージング）して凸要素毎の複数の新たなポリゴン部分集合ＤＰ１，ＤＰ２，・・・を求める。
しかる後、ポリゴン部分集合ＤＰ１，ＤＰ２，・・・を出力する（ステップ１１０３）。尚、各ポリゴン部分集合ＤＰ１，ＤＰ２，・・・に基づいて凸多面体が生成される。
分割統治法において問題依存性が存在する最も重要な個所は、「併合」過程、すなわち、関数Ｍｅｒｇｅの構成方法である。
【０１１９】
（ｃ）  分割統治法におけるＭｅｒｇｅプロセス
凸要素ＣＬｉ，ＣＨｊがＭｅｒｇｅ可能であるためには、ＣＬｉ，ＣＨｊが共通の境界稜線を有することである。すなわち、凸要素ＣＬｉ，ＣＨｊが互いに境界稜線を通じて干渉していることが必要条件である。従って、凸要素ＣＬｉ，ＣＨｊ間に干渉チェックアルゴリズムを  適用し、干渉していなければ、ＣＬｉ，ＣＨｊに対して以後のＭｅｒｇｅ処理をスキップできる。
図３９は分割統治法におけるＭｅｒｇｅプロセスの流れ図である。
１）  凸要素集合ＤＣ（ＰＬ），ＤＣ（ＰＨ）を用意する（ステップ１１１１ａ，１１１１ｂ）。
0003556644.tif 000008
凸要素集合ＤＣ（ＰＬ），ＤＣ（ＰＨ）の各要素はポリゴン部分集合（ｐｏｌｙｇｏｎｓ）とその要素の境界をなす境界稜線の集合（ｂｏｕｎｄａｒｙ  ｅｄｇｅｓ）で構成される。
【０１２０】
２）  Ｍｅｒｇｅ  可能性の判定
凸要素ＣＬｉ，ＣＨｊが互いにＭｅｒｇｅ可能か否かを判定する（ステップ１１１２′）。判定条件は以下の通りである。
条件１：凸要素ＣＬｉ，ＣＨｊの境界稜線ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ間で干渉チェックを行なう。干渉が無ければＭｅｒｇｅ不可能と判定する。
条件２：干渉している可能性のある凸要素ＣＬｉ，ＣＨｊに対し、ＣＬｉ，ＣＨｊ間で共有している境界稜線を全て取り出す。共有しているか否かは、境界稜線を構成するポリゴン辺の中点を比較することにより判定できる。共有している境界稜線が１本もなければＭｅｒｇｅ不可能と判定する。
条件３：共有している境界稜線に対し、その稜線を共有するＣＬｉのポリゴンとＣＨｊのポリゴン間の凹凸関係を調べる。１組でも凹の関係にあるポリゴンの組合せが存在すれば、Ｍｅｒｇｅ不可能と判定する。
条件３：条件１、条件２、条件３をクリアした場合はＭｅｒｅｇｅ可能と判定する。
【０１２１】
３）  Ｍｅｒｇｅの順序
凸要素のＭｅｒｇｅは以下の順序で行なう。
３−１）  凸要素ＣＬ１がＣＨｊ（ｊ＝１，２，・・・ＮＰＨ）とＭｅｒｇｅ可能か否かを判定する。もし、ＣＬ１がＣＨｊとＭｅｒｇｅ可能であれば、それ以降は、ＣＬ１，ＤＣ（ＰＨ）を以下のようにする。
0003556644.tif 000009
３−２）  ＣＬｉ（ｉ＝２，３，・・・ＮＰＬ）に対して同様の手順を実行する。
４）  併合凸要素集合ＤＣ（Ｐ）の構成
上記３）のプロセスにより
併合凸要素集合ＤＣ（Ｐ）＝Ｍｅｒｇｅ  （ＤＣ（ＰＬ），ＤＣ（ＰＨ））
が実行され、
ＤＣ（Ｐ）＝｛ＣＬ１，ＣＬ２，・・・ＣＬＰＮＰＬ，ＣＨｊ′，ＣＨｊ″・・・｝
で与えられる併合凸要素集合ＤＣ（Ｐ）が出力される（ステップ１１１３′）。ここで、｛ＣＨｊ′，ＣＨｊ″・・・｝は、いかなるＣＬｉともＭｅｒｇｅしないＤＣ（ＰＨ）の凸要素である。
【０１２２】
（ｄ）  干渉チェックアルゴリズム
凸物体間の干渉チェックアルゴリズムのうち、Ｂｏｂｒｏｗ法、Ｌｉｎ／Ｃａｎｎｙ法、Ｇｉｌｂｅｒｔ法が既存の計算負荷Ｏ（Ｎ）の干渉チェック法として使用できる。
図４０は干渉チェックアルゴリズムの概略処理フローである。
凸要素ＣＬｉ，ＣＨｊの境界稜線ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊで構成される凸物体間に干渉チェックアルゴリズムを適用する（ステップ１４０１）。
干渉チェックアルゴリズムの適用により境界稜線ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊの最接近点間の距離ｄｉｓｔ（ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ）を求めて出力する（ステップ１４０２）。
最接近点間の距離が求まれば、該距離ｄｉｓｔ（ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ）とεの大小を比較し、
ｄｉｓｔ（ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ）≦εの場合には干渉すると判定し、
ｄｉｓｔ（ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ）＞εの場合には干渉しないと判定する。尚、εは干渉チェック判定の精度を決めるユーザ定義の微小定数である。
【０１２３】
（ｆ）  干渉チェック方法（Ｇｉｌｂｅｒｔ法）
凸要素ＣＬｉ，ＣＨｊの境界稜線ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊで構成される凸物体間の最接近点間の探索及びその距離ｄｉｓｔ（ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ）は前述のＧｉｌｂｅｒｔ法により求める。
尚、Ｇｉｌｂｅｒｔ法の初期格子点（初期値）Ｖ０は一般には任意であるが、各物体の重心差分方向の格子点から出発するのが効率的である。
Ｇｉｌｂｅｒｔ法により最接近点を求める時、以下の不等式が成立する（図４１参照）。    ｒｋ＝−ｈｋ（−νｋ）／｜νｋ｜≦    ｜ν（Ｋ）｜≦｜νｋ｜            （１６）
従って、あるｋに対し、ｒｋ＞０ならば２凸物体間の干渉は無いといえる。
【０１２４】
（ｇ）  Ｇｉｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定処理
図４２はＧｉｌｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定処理フローである。
凸要素ＣＬｉ，ＣＨｊの境界稜線ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊでそれぞれ構成される凸物体間にＧｉｌｂｅｒｔ法を適用して、（１３）式のｒｋを計算する（ステップ１４１１）。
ついで、ｒｋ＞０か判断し（ステップ１４１２）、ｒｋ＞０の場合には干渉しないから、Ｍｅｒｇｅ不可能と判定する（ステップ１４１３）。
しかし、ｒｋ≦０の場合には、干渉しているからＭｅｒｇｅ干渉ありとして、前述のＭｅｒｇｅ可能性の条件２〜条件４よりＭｅｒｇｅ可能／不可能を判定する（ステップ１４１４）。
【０１２５】
（ｈ）  簡略化したＧｉｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定処理
Ｇｉｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定処理を更に簡略化する。簡略化の要点はＧｉｌｂｅｒｔ法の初期格子点Ｖ０として境界稜線上の頂点集合ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊから任意の頂点ＢｅｄｇｅＣＬｉ０、ＢｅｄｇｅＣＨｊｉ０を選んで、
Ｖ０＝ＢｅｄｇｅＣＬｉ０−ＢｅｄｇｅＣＨｊｉ０                （１７）
を構成する。ついで、このＶ０を使って
ｒ＝−ｈｋ（−Ｖ０）＝−ｈｋ１（−Ｖ０）−ｈｋ２（Ｖ０）            （１８）
を計算する。もし、ｒ＞０ならば、ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊ間は干渉が無く、凸要素ＣＬｉ，ＣＨｊはＭｅｒｇｅする可能性が無いと判定する。
【０１２６】
図４３は簡略化したＧｉｌｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定処理フローである。
凸要素ＣＬｉ，ＣＨｊの境界稜線ＢｅｄｇｅＣＬｉ、ＢｅｄｇｅＣＨｊでそれぞれ構成される凸物体間に簡略化したＧｉｌｂｅｒｔ法を適用して、（１５）式のｒを計算する（ステップ１４１１′）。
ついで、ｒ＞０か判断し（ステップ１４１２′）、ｒ＞０の場合には干渉しないから、Ｍｅｒｇｅ不可能と判定する（ステップ１４１３′）。しかし、ｒ≦０の場合には、干渉しているからＭｅｒｇｅ干渉ありとして、前述のＭｅｒｇｅ可能性の条件２〜条件４よりＭｅｒｇｅ可能／不可能を判定する（ステップ１４１４′）。
【０１２７】
（Ｋ）凸分解の変形例
（ａ）  変形例１
以上の第５実施例の凸分解法に最適化処理を施して凸要素数を減少するように構成することができる。この場合の処理フローを図４４に示す。図４４において、第２実施例の処理（図３２参照）と異なる点は、ステップ１２０２′、１２０４′において凸分解基本アルゴリズムに替わって、干渉チェック組込型の高速凸分解アルゴリズムを使用している点である。
（ｂ）    変形例２
干渉チェック組込型の高速凸分解アルゴリズムを負物体が存在する場合における凸分解処理に適用することができ、この場合の処理フローを図４５に示す。図４５において、第３実施例と異なる点は、ステップ１３０３′、１３０６′において凸分解基本アルゴリズムに替わって、干渉チェック組込型の高速凸分解アルゴリズムを使用している点である。
（ｃ）  変形例３
変形例２に更に最適化処理を施して凸要素数を減少するように構成することもできる。
【０１２８】
（Ｌ）最接近点探索の前処理（近接点線形リストの作成）
以上では、ポリゴンデータより有向グラフ型構造データを前処理により生成し、この有向グラフ型構造データを用いて凸多面体間あるいは非凸多面体間の最接近点探索処理を行なった場合である。
有向グラフ構造データとは別の構造データ、すなわち、近接点線形リストを前処理により作成し、該リストを使用することにより最接近点の連続探索を高速化することができる。
近接点線形リストとは、形状モデル（ＣＧモデル）を構成する各ポリゴンの頂点を第１方向（ｎｅｘｔ方向）にリンクし、各頂点にポリゴン辺を介して繋がる頂点群を第２の方向（ｂｒａｎｃｈ方向）に該頂点にリンクしてなるデータ構造を備えたリストである。リストの先頭から順次たどることにより、その頂点に繋がる全ての近接点を拾いだすことができる。
【０１２９】
（ａ）  近接点線形リストの例
図４６は、直方体の近接点線形リストの例を示している。図示の通り、近接点線形リストは、頂点を順次繋いだｎｅｘｔ方向と、各頂点にポリゴン辺を介して連結する近接点を配列するｂｒａｎｃｈ方向の２方向を持つ。ｂｒａｎｃｈ方向の先頭には、その頂点自身が入る。
（ｂ）  近接点線形リストの構成法
図４７は近接点線形リストの作成処理のフローである。尚、図４８に示すように対象物体は三角形ポリゴンの集合で構成されており、各三角形ポリゴンはｖｅｒｔｅｘに続く３つの頂点座標値とｎｏｒｍａｌに続く３つの各頂点における光の反射方向データで表現される。
【０１３０】
三次元ＣＡＤシステムは形状モデルを作成してポリゴンデータファイルを出力する（ステップ２００１、２００２）。ついで、干渉チェック組込型分割統治法による凸分解基本アルゴリズムに従って、上記ポリゴンデータを凸要素毎に分割されたポリゴンデータの組（ポリゴン部分集合）に分ける。すなわち、初期のポリゴンデータを凸要素毎の部分集合の組に分割して出力する（ステップ２００３，２００４）。しかる後、各部分集合毎に、すなわち凸多面体毎に近接点線形リスト構成アルゴリズムを用いて近接点線形リストをを生成してメモリに展開する（ステップ２００５、２００６）。ついで、該近接点線形リストを用いて最接近点探索処理（干渉チェック処理）を実行すると共に近接点線形リストを外部記憶媒体に記憶する（ステップ２００７）。以後、該近接点線形リストが必要な場合には、新たに作成せず、外部記録媒体から読み出してメモリに展開する（ステップ２００８）。
【０１３１】
（ｃ）  近接点線形リスト構成アルゴリズム
図４９は対象物体の凸要素毎のポリゴンデータ説明図、図５０は近接点線形リスト構成アルゴリズムの説明図である。
対象物体が三角形ポリゴンの集合で構成されているものとすると、近接点線形リストは以下のフローに従って構成される。
１）  凸分解基本アルゴリズムにより、凸要素毎のポリゴンデータを用意する（図４９参照）。
２）  各々のポリゴンデータ（ｐｉ，ｑｉ，ｒｉ）に対し、各頂点をリストＬに繋げていく。ｎｅｘｔ方向を頂点に対する線形リスト方向、ｂｒａｎｃｈ方向を各頂点の近接点方向とする。リストＬの先頭要素は第１番目のポリゴンの第１頂点であり、作成途中では図５０（ａ）に示すデータ構造となっている。具体的には以下のようにリストを作成する。
２−１）  リストＬの先頭要素ｔｏｐを割り付ける。すなわち、ｔｏｐとして最初のポリゴンの最初の頂点を割り付ける。
【０１３２】
２−２）  ポリゴン（ｐｉ，ｑｉ，ｒｉ）に対し、以下の割付けを繰り返す。
１）  ｉｆ（全てのｊに対し、Ｌｊ≠ｐｉ）ならば、新しい要素ｐｉをｎｅｘｔ方向の端に割り付ける（図５０（ｂ）参照）。ついで、頂点Ｌｊ＋１のｂｒａｎｃｈ方向に対し、自分自身ｐｉ及びｑｉ，ｒｉを割り付ける（図５０（ｃ）参照）。
２）  ｉｆ（あるｊに対し、Ｌｊ＝ｐｉ）ならば、Ｌｊのｂｒａｎｃｈ方向に対し、ｑｉ，ｒｉを割り付ける。もし、ｂｒａｎｃｈ方向に既にｑｉ，ｒｉと同一頂点があれば割り付けることはしない（図５０（ｄ）参照）。
３）  頂点ｑｉに対して上記１）、２）の処理を実行する。ただし、頂点ｑｉに対するｑｉ以外のｂｒａｎｃｈ候補はｐｉ，ｒｉである。
４）  頂点ｒｉに対して上記１）、２）の処理を実行する。ただし、頂点ｒｉに対するｒｉ以外のｂｒａｎｃｈ候補はｐｉ，ｑｉである。
２−３）  全てのポリゴン集合∪ｉ（ｐｉ，ｑｉ，ｒｉ）に対し、２−２）の処理を繰り返す
。
【０１３３】
（ｄ）  近接点線形リストの作成例
図５１、図５２は近接点線形リストの作成例説明図である。
凸分解基本アルゴリズムにより、凸要素毎のポリゴンデータを用意する（ステップ２０１１）。以後、第１ポリゴンをリストに組み込み（ステップ２０１２）、ついで、第２ポリゴンをリストＬに組み込む（ステップ２０１３）。
すなわち、ステップ２０１２において、まず、第１ポリゴンの第１頂点Ｖ１をｔｏｐとして割り付ける。すなわち、
ｔｏｐ＝Ｌ１＝Ｖ１
とする（２０１２ａ）。ついで、頂点Ｖ１に対するｂｒａｎｃｈ方向に第１ポリゴンの全頂点Ｖ１，Ｖ２，Ｖ３を割り付ける（ステップ２０１２ｂ）。しかる後、第２頂点Ｖ２をｎｅｘｔ方向に割り付け（ステップ２０１２ｃ）、割付け後、頂点Ｖ２に対するｂｒａｎｃｈ方向に第１ポリゴンの全頂点Ｖ２，Ｖ３，Ｖ１を割り付ける（ステップ２０１２ｄ）。以後、同様に第３頂点Ｖ３をｎｅｘｔ方向に割り付け（ステップ２０１２ｅ）、割付け後、頂点Ｖ３に対するｂｒａｎｃｈ方向に第１ポリゴンの全頂点Ｖ３，Ｖ１，Ｖ２を割り付ける（ステップ２０１２ｆ）。
【０１３４】
ステップ２０１３において、第２ポリゴンの第１頂点Ｖ１を割り付ける。この場合、ｎｅｘｔ方向に頂点Ｖ１は既に割り付けられているから、頂点Ｖ１のｂｒａｎｃｈ方向に頂点Ｖ１，Ｖ３，Ｖ４を割り付ける。しかし、既に、頂点Ｖ１，Ｖ３は割り付けられているから頂点Ｖ４のみを割り付ける（ステップ２０１３ａ）。
ついで、第２頂点Ｖ３をｎｅｘｔ方向に割り付ける。この場合、ｎｅｘｔ方向に頂点Ｖ３は既に割り付けられているから、頂点Ｖ３のｂｒａｎｃｈ方向に頂点Ｖ３，Ｖ４，Ｖ１を割り付ける。しかし、既に、頂点Ｖ３，Ｖ１は割り付けられているから頂点Ｖ４のみを割り付ける（ステップ２０１３ｂ）。
しかる後、第３頂点Ｖ４をｎｅｘｔ方向に割り付ける（ステップ２０１３ｃ）。ついで、頂点Ｖ４のｂｒａｎｃｈ方向に頂点Ｖ４，Ｖ１，Ｖ３を割り付ける（ステップ２０１３ｄ）。
以上では、ポリゴンを三角形ポリゴンとして説明したが、三角形ポリゴンに限定されず、任意の多角形ポリゴンでもよい。Ｎ個の頂点から近接点線形リストを作成する計算負荷はＯ（Ｎ２）である。
【０１３５】
（Ｍ）最接近点探索の前処理（近接点多分木リストの作成）
近接点線形リストを作成する計算負荷はＮ個の頂点の場合Ｏ（Ｎ２）であり大きい。そこで、最接近点の連続探索に使用できる別のデータ構造のリスト（近接点多分木リスト）を作成し、該リストを使用することにより最接近点の連続探索を高速化する。
近接点多分木リストとは、次のような頂点の配列リストである。すなわち、基準頂点を定めると共に、該基準頂点のＸ座標値より大きい第１ネクスト方向（ｘｒｉｇｈｔ）、Ｘ座標値より小さい第２ネクスト方向（ｘｌｅｆｔ）、Ｙ座標値より大きい第３ネクスト方向（ｙｒｉｇｈｔ）、Ｙ座標値より小さい第４ネクスト方向（ｙｌｅｆｔ）、Ｚ座標値より大きい第５ネクスト方向（ｚｒｉｇｈｔ）、Ｚ座標値より小さい第６ネクスト方向（ｚｌｅｆｔ）を定める。そして、基準頂点の各軸座標値と該基準頂点にポリゴン辺で繋がっている頂点（対象頂点という）の各軸座標値とを比較し、その大小に応じて対象頂点をリンクするネクスト方向を求めると共に、該ネクスト方向に基準頂点に近い順に前記対象頂点をリンクする。ネクスト方向に対象頂点をリンクする際、該ネクスト方向に既にリンクされている他の頂点の座標値と対象頂点の座標値が等しい場合には、該他の頂点と対象頂点の各軸座標値を比較する。そして、その大小に応じたネクスト方向を求め、対象頂点を前記他の頂点に関して該ネクスト方向にリンクする。又、各頂点にｂｒａｎｃｈ方向を定め、該方向に該頂点にポリゴン辺で繋がる全頂点を配列する。以上のように作成したものが近接点多分木リストである。
【０１３６】
（ａ）  近接点多分木リストの例
図５３は、直方体の近接点多分木リストの例を示している。図示の通り、近接点多分木リストにおいて、各頂点はｘ，ｙ，ｚの各軸方向の大小に相当する６つのリンク方向ｘｒｉｇｈｔ、ｘｌｅｆｔ、ｙｒｉｇｈｔ、ｙｌｅｆｔ、ｚｒｉｇｈｔ、ｚｌｅｆｔを備えると共に、１つのｂｒａｎｃｈ方向を備えている。頂点のｂｒａｎｃｈ方向には該頂点にポリゴン辺で繋がる全頂点が配列され、その先頭には、該頂点自身が配置される。
【０１３７】
（ｂ）  近接点多分木リストの構成法
図５４は近接点多分木リストの作成処理のフローである。三次元ＣＡＤシステムは形状モデルを作成してポリゴンデータファイルを出力する（ステップ２１０１、２１０２）。ついで、干渉チェック組込型分割統治法による凸分解基本アルゴリズムに従って、上記ポリゴンデータを凸要素毎に分割されたポリゴンデータの組（ポリゴン部分集合）に分ける。すなわち、初期のポリゴンデータを凸要素毎の部分集合の組に分割して出力する（ステップ２１０３，２１０４）。しかる後、各部分集合毎に、すなわち凸多面体毎に近接点多分木リスト構成アルゴリズムを用いて近接点多分木リストを生成する（ステップ２１０５）。
ついで、近接点多分木変換アルゴリズムにより、近接点多分木リストを近接点線形リストに変換してしてメモリに展開する（ステップ２１０６、２１０７）。しかる後、該近接点線形リストを用いて最接近点探索処理（干渉チェック処理）を実行すると共に近接点線形リストを外部記憶媒体に記憶する（ステップ２１０８）。以後、該近接点線形リストが必要な場合には、新たに作成せず、外部記録媒体から読み出してメモリに展開する（ステップ２１０９）。
【０１３８】
（ｃ）  近接点多分木リスト構成アルゴリズム
対象物体が三角形ポリゴンの集合で構成されているものとすると、近接点多分木リストは以下のフローに従って構成される。
１）  凸分解基本アルゴリズムにより、凸要素毎のポリゴンデータを用意する（図４９参照）。
２）  各々のポリゴンデータ（ｐｉ，ｑｉ，ｒｉ）に対し、各頂点を多分木リストＭＬに繋げていく。
多分木リストＭＬにおいて、ｘｒｉｇｈｔ、ｘｌｅｆｔ、ｙｒｉｇｈｔ、ｙｌｅｆｔ、ｚｒｉｇｈｔ、ｚｌｅｆｔをそれぞれ着目している頂点から見たｘ，ｙ，ｚ軸の大小方向とする。また、各頂点は近接点方向としてｂｒａｎｃｈ方向を持つ。具体的には以下の手続きに従って近接点多分木リストＭＬを構成していく（図５３参照）。
【０１３９】
２−１）  ＭＬの先頭要素ｔｏｐを割り付ける。ｔｏｐとしては、最初のポリゴンの最初の頂点を割り付ける。
２−２）  ポリゴン（ｐｉ，ｑｉ，ｒｉ）に対し、以下の割付けを繰り返す。
（１）頂点ｐｉに対し、ＭＬの先頭要素ｔｏｐから見てｘ座標値の大小、ｙ座標値の大小、ｚ座標値の大小の順に辞書式に比較し、割付けを行なう。すなわち、まず、頂点ｐｉのｘ座標値がｔｏｐのｘ座標値より大きい時は、ｔｏｐから見てｘｒｉｇｈｔ方向の配置済みの他の要素のｘ座標値と頂点ｐｉのｘ座標値の大小を比較し、ｘｒｉｇｈｔ方向に対して昇順になるようにｐｉを配置する。頂点ｐｉのｘ座標値がｔｏｐのｘ座標値より小さい時は、ｔｏｐから見てｘｌｅｆｔ方向に対して同様の配置を行う。
頂点ｐｉのｘ座標値と一致するｘ座標値を有する配置済みの頂点が存在する場合には、ｙ座標値の比較を行い、その配置済み頂点から見てｙ座標方向に昇順になるように配置する。ｙ座標値が一致する配置済み頂点が存在する場合には、ｚ座標値に対して同様の昇順配置を行う。もし、ｘ，ｙ，ｚの全ての座標値の一致する頂点が存在すれば、頂点ｐｉをその点と同一と見做す。
（２）新しく割り付けた頂点ｐｉに対し、該頂点ｐｉのｂｒａｎｃｈ方向に自分自身ｐｉ及びｑｉ，ｒｉを割り付ける。もし、既に、頂点ｐｉがｂｒａｎｃｈ要素を有している場合には、各ｂｒａｎｃｈ要素との比較を行い、同一点の割付けを避けるようにする。
【０１４０】
（３）  頂点ｑｉに対して上記（１）、（２）の処理を実行する。ただし、頂点ｑｉに対するｑｉ以外のｂｒａｎｃｈ候補はｐｉ，ｒｉである。
（４）  頂点ｒｉに対して上記（１）、（２）の処理を実行する。ただし、頂点ｒｉに対するｒｉ以外のｂｒａｎｃｈ候補はｐｉ，ｑｉである。
２−３）  全てのポリゴン集合∪ｉ（ｐｉ，ｑｉ，ｒｉ）に対し、２−２）の処理を繰り返す。    以上では、ポリゴンを三角形ポリゴンとして説明したが、三角形ポリゴンに限定されず、任意の多角形ポリゴンでもよい。Ｎ個の頂点から近接点多分木リストを作成する計算負荷はＯ（ＮｌｏｇＮ）である。
【０１４１】
（ｄ）  近接点多分木リスト変換アルゴリズム
凸多面体同士の干渉チェック（最接近点探索処理）では、凸多面体を構成する各頂点とのベクトル内積を取り、その最大値を検出する計算を繰返し行う。この時、各頂点を近接点多分木リストの形式で持っていると、各頂点を順次辿っていくときに煩雑な判定関数が多数絡むことになる。そこで、一端、近接点多分木リストの形式で各頂点の近接点を構成した後は、多分木リストを線形リストに変換しておくと以後の計算量が少なくてすむ。
多分木リストを線形リストに変換するには、例えば、以下に示す再帰関数
ｖｅｒｔｅｘ  ＊  ＭｕｌｔｉＴｏＬｉｎｅａｒ（  ）を使用する。
【０１４２】
0003556644.tif 000010
0003556644.tif 000011
上記関数を多分木リストＭＬの先頭要素ｔｏｐに作用させると（ｔｏｐ→ＭｕｌｔｉＴｏＬｉｎｅａｒ（  ））、多分木リストＭＬは線形リストＬに変換される。
近接点多分木リスト変換アルゴリズムの計算時間は、総頂点数をＮとすればＯ（Ｎ）である。従って、ポリゴンデータから近接点多分木リスト構成アルゴリズムを経て近接点線形リストＬを生成するトータルの計算時間は、Ｏ（ＮｌｏｇＮ）である。
【０１４３】
（Ｎ）最接近点探索の前処理（近接点線形リストのダンプ及びローデング）
最接近点探索処理、すなわち、干渉チェック処理で必要となる近接点線形リスト情報は、全てメモリ上に展開しておかなければならない。もし、ダンプファイル（ｄｕｍｐ  ｆｉｌｅ）からメモリ上へ展開するのに、近接点多分木リストを構成するのと同じ計算時間（総頂点数Ｎに対してＯ（ＮｌｏｇＮ））を要してしまうならば、ダンプファイルを作成する意味がなくなってしまう。そこで、本発明ではダンプファイルからのローデング時間がＯ（Ｎ）となるようにダンプファイルのフォーマットを定めている。
（ａ）  ダンプファイルのフォーマット
ダンプファイルのフォーマットは、図５５に示すような形式とする。このファイルフォーマットにおいて、高速ローデングの必須項目は以下の通りである。
１）  凸要素毎に区切られていること、
２）  凸要素を構成する総頂点数（ｃｏｕｎｔ）の項目があること、
３）  各々の頂点に番号付けがされていること、
４）  各々の頂点に対し、その頂点の近接点個数（ｂｃｏｕｎｔ）を定義する項目があること、
５）  各々の頂点の座標を定義する項目があること
である。
【０１４４】
（ｂ）  ダンプファイルからのローデング法
１）  凸要素を構成する総頂点数（ｃｏｕｎｔ）を読み、各頂点を収めるｃｏｕｎｔ次元の配列を作る。
２）  配列に凸要素の各頂点を収めていくと共に、各頂点間をｎｅｘｔ方向に結び線形リストを構成する。例えば、Ｖｅｒｔｅｘを収める配列をＶ［Ｎｉ］とする時、Ｖ［０］，Ｖ［１］，・・・を順にｎｅｘｔ方向に結び、線形リストを構成する。
３）  １），２）の処理を各凸要素に施す。
【０１４５】
４）  各凸要素の各頂点に対し、ｂｒａｎｃｈの近接点番号（配列内の位置を指定）をたよりに、ｂｒａｎｃｈ方向に近接点のリストを張る。例えば、Ｖｅｒｔｅｘを収める配列をＶ［Ｎｉ］とする時、Ｖｅｒｔｅｘ  Ｖ［０］のｂｒａｎｃｈの番号が（０，９，１，７，８）ならば、Ｖｅｒｔｅｘ  Ｖ［０］のｂｒａｎｃｈ方向にＶ［０］，Ｖ［９］，Ｖ［１］，Ｖ［７］，Ｖ［８］を線形リストに繋ぐ。
５）  ４）の処理を各凸要素に施す。
上記ローデング法では、同じファイルに対して計２回（１），２），３）が１回目、４），５）が２回目）の読み込みを行う。各頂点のｂｒａｎｃｈ数はほとんどの場合において数１０個以下で抑えられるため、合計のローデング時間はＯ（Ｎ）である。図５５のように、凸要素毎に分割されたダンプファイルをＬファイルという。
（ｃ）  凸包に対するダンプファイル
非凸多面体を包む最小の凸多面体（凸包）に対して、図５５と同様のダンプファイルが定義される。この場には、凸要素数は１つであり、ｖｅｒｔｅｘは非凸多面体を構成する全ての頂点からなる。凸包に対する図５５の形式のファイルをＨＬファイルという。
【０１４６】
（Ｏ）干渉チェックサブアルゴリズム（包絡球による事前チェック）
任意の非凸多面体に対し、それを包絡する球を前処理において生成しておく。この時、非凸多面体間の干渉チェックに入る前に、包絡球間で干渉チェックを行い、高速化する。
（ａ）  包絡球の構成法
非凸多面体は三角形ポリゴンの集合で表現されており、∪ｉ（ｐｉ，ｑｉ，ｒｉ）と表現する。サフィックスｉは各ポリゴンを識別する添字である。
ｐｉ，ｑｉ，ｒｉの各座標値をｐｉ＝（ｐｉｘ，ｐｉｙ，ｐｉｚ）、ｑｉ＝（ｑｉｘ，ｑｉｙ，ｑｉｚ）、ｒｉ＝（ｒｉｘ，ｒｉｙ，ｒｉｚ）とする。
この時、凸包のｍａｘ点、ｍｉｎ点を以下のようにして求める。
ｍａｘ＝（ＭＡＸｉ（ｐｉｘ，ｑｉｘ，ｒｉｘ），ＭＡＸｉ（ｐｉｙ，ｑｉｙ，ｒｉｙ），ＭＡＸｉ（ｐｉｚ，ｑｉｚ，ｒｉｚ））
ｍｉｎ＝（ＭＩＮｉ（ｐｉｘ，ｑｉｘ，ｒｉｘ），ＭＩＮｉ（ｐｉｙ，ｑｉｙ，ｒｉｙ），ＭＩＮｉ（ｐｉｚ，ｑｉｚ，ｒｉｚ））
包絡球は、以下の計算式に基づいて定義される。
半径Ｒ＝｜ｍａｘ−ｍｉｎ｜／２
中心Ｐｃ＝（ｍａｘ＋ｍｉｎ）／２
【０１４７】
（ｂ）  凸要素に対する包絡球
各凸要素に対しても、それぞれの凸要素を包絡する球が定義される。計算方法は、（ａ）と同様である。ただし、ｍａｘ，ｍｉｎを定義する時のサフィックスｉは各凸要素のポリゴン集合を意味する。
（ｃ）  包絡球による事前のチェックアルゴリズム
図５６は包絡球による事前のチェックの処理フローである。
各非凸多面体Ａ，Ｂの包絡球半径ＲＡ，ＲＢ、包絡球中心ＰＣＡ，ＰＣＢを前述の方法で求め（ステップ２２０１、２２０２）、各包絡球の中心間距離ｒを次式
ｒ＝｜ＰＣＡ−ＰＣＢ｜
により求め、
ｒ≦（ＲＡ＋ＲＢ）かチェックする（ステップ２２０３）。ｒ＞（ＲＡ＋ＲＢ）であれば干渉なしと判定する（ステップ２２０４）。ｒ≦（ＲＡ＋ＲＢ）であれば、干渉するものと判定し、以後非凸多面体同士の干渉チェックを行う（ステップ２２０５）。
【０１４８】
（Ｐ）干渉チェックサブアルゴリズム
（凸多面体干渉チェックにおける連続探索）
近接点線形リストより、最新に求まっている最接近点に近接する頂点を抽出し、これら頂点にＧｉｌｂｅｒｔ法による干渉チェック法を適用して所定時間後の最接近点を探索する。このようにすることにより、干渉チェックに要する時間は凸多面体を表現するポリゴン数にほとんど依存しない一定数以下に抑えることができる。
（ａ）  Ｇｉｌｂｅｒｔ法
凸多面体Ｋ１，Ｋ２間の最接近点間の距離ν（Ｋ）はｇＫ（νＫ）＝０となるνＫに対し、（１２）′式を使って
0003556644.tif 000012
ただし、ｘ１ｉ：Ｋ１を構成する頂点
ｘ２ｉ：Ｋ２を構成する頂点
で与えられる。
【０１４９】
（ｂ）  Ｇｉｌｂｅｒｔ法の直感的理解
図５７はＧｉｌｂｅｒｔ法による最接近点探索法を直感的に理解できるようにした説明図である。その各プロセスを簡単に説明すると以下のようになる。
１）  ベクトルηの設定
２つの物体の幾何学的重心を結び、ν０とする（図５７図（ａ））。
２）  以下の内積計算
ｈＫ１（−ν０）＝ｍａｘ［−ｘ１ｉ・ν０：ｉ＝１，・・・ｍ１］        （２０）
ｈＫ２（−ν０）＝ｍａｘ［−ｘ２ｉ・ν０：ｉ＝１，・・・ｍ２］        （２１）
を行い、ベクトルν０の方向で互いに最も接近している２点ｐ０，ｑ０を選びだす（図５７図（ａ））。
３）  ν１の更新
２点ｐ０，ｑ０を結んでν１とする（図５７図（ｂ））。
４）  内積計算
ν１に対して２）と同じ内積計算を行い、新たな２点ｐ１，ｑ１を選びだす（図５７図（ｂ））。
５）  内積計算とν１の更新を繰り返して、最終的な最接近点ベクトルνｆｉｎａｌを求める（図５７図（ｃ））。
上記のプロセスから判る通り、Ｇｉｌｂｅｒｔ法における主な計算負荷は内積計算の過程で発生する。従って、Ｇｉｌｂｅｒｔ法における最接近点探索の計算時間はＯ（ｍ１＋ｍ２）となる。
【０１５０】
（ｃ）  凸多面体における連続干渉チェック
Ｇｉｌｂｅｒｔ法における計算負荷はサポート関数ｈＫ１，ｈＫ２の内積計算の過程で発生する。そこで、この内積計算の回数を減らすために最接近ベクトルν（Ｋ）の近接点を効率的に見つけだす方法を考える。
凸多面体Ｋ１，Ｋ２の最接近点νＫ１，νＫ２は（１９）式から次式で与えられる。
νＫ１＝Σλｉｘ１ｉ    （ｉ∈ＩＫ１Ｓｋ）        （２２）
νＫ２＝Σλｉｘ２ｉ    （ｉ∈ＩＫ２Ｓｋ）        （２３）
最接近点を連続的にサーチする場合、所定時間後の最接近点は（２２），（２３）式で与えられるνＫ１，νＫ２の近傍に存在する。従って、サポート関数ｈＫ１，ｈＫ２を計算する場合の頂点は（２２），（２３）式における頂点ｘ１ｉ，ｘ２ｉの近接点に限ることができる。
【０１５１】
図５８は凸多面体における連続的干渉チェックアルゴリズムのフローである。
まず、２つの凸多面体のそれぞれの幾何中心ＧＫ１，ＧＫ２を求め、ベクトルν０＝ＧＫ１−ＧＫ２
を求める（ステップ２３０１）。ついで、ν０を初期値としてＧｉｌｂｅｒｔ法による干渉チェックアルゴリズムを実行し、（２２），（２３）式で与えられるνＫ１，νＫ２を求める（ステップ２３０２）。
しかる後、ν０＝νＫ１−νＫ２としてＧｉｌｂｅｒｔ法による干渉チェックアルゴリズムを実行する（ステップ２３０３）。ただし、サポート関数
ｈＫ（−ν１）＝ｈＫ１（−ν１）＋ｈＫ２（ν１）
の計算において、ｈＫ１（−ν１），ｈＫ２（ν１）は以下の式に基づいて計算する。
ｈＫ１（−ν１）＝ｍａｘ［−ｘ１ｉ・ν１：ｐ＝（２２）式で与えられるｘ１ｉの近接点集合の番号］
ｈＫ２（−ν１）＝ｍａｘ［−ｘ２ｉ・ν１：ｐ＝（２２）式で与えられるｘ１ｉの近接点集合の番号］
ついで、（２２），（２３）式により最接近点を算出し、以後ｇＫ（νＫ）＝０となるまでステップ２３０３以降の処理を繰り返す。
図５８における頂点ｘ１ｉ，ｘ２ｉの近接点の個数は、殆どのＣＧモデル（形状モデル）において数１０以下に抑えることができる。従って、連続的干渉チェックアルゴリズムの計算負荷は、ＣＧモデルのポリゴン数に関係なく一定である。
【０１５２】
（Ｑ）干渉チェックサブアルゴリズム（凸包の動的構成／解除）
非凸多面体に対し、それを包絡する最小の凸多面体として凸包を定義する。非凸多面体間の距離が十分離れている場合には凸包間の干渉チェックを行い、凸包同士が干渉し始めたら、非凸多面体を構成する凸要素間の干渉チェックに自動的に移行する。非凸多面体間の距離が再び大きくなった場合には、凸包が回復し、凸包間の干渉チェックに戻す。
（ａ）  凸包の動的構成／解除の基本的な考え方
図５９、図６０はは凸包の構成／解除の基本的な考え方を示す説明図である。図５９において、Ａ，Ｂは第１、第２の非凸多面体、ＣＡ１，ＣＡ２は非凸多面体Ａを構成する凸多面体、ＣＢ１，ＣＢ２は非凸多面体Ｂを構成する凸多面体である。
１）  非凸多面体Ａ，Ｂが十分離れている場合には凸包Ａ′、Ｂ′間の干渉チェックを行う（図６０（ａ）参照）。
【０１５３】
２）  凸包Ａ′、Ｂ′同士が干渉を始めると（図６０（ｂ）参照）、一方の凸包Ａ′を解除し、凸要素ＣＡ１，ＣＡ２と凸包Ｂ′との干渉チェックを行い、干渉する場合には凸要素ＣＡ１を取り出す（図６０（ｃ）参照）。
３）  ついで、凸要素と凸包との立場を入れ替えて、もう一方の凸包Ｂ′を解除し、解除した凸包の凸要素ＣＢ１，ＣＢ２と凸包Ａ′との干渉をチェックを行い、干渉している凸要素ＣＢ１を取り出す（図６０（ｄ）参照）。
４）  最後に、取り出した凸要素のすべての組合せ（図６０ではＣＡ１，ＣＢ１）について干渉チェックを行い、それらの内で距離が最小となる距離を求める。（図６０（ｅ））。
２）において、例えば、図６１（ａ）に示すように、凸要素ＣＡ１，ＣＡ２と凸包Ｂ′間の干渉が存在しないような場合、凸要素ＣＡ１，ＣＡ２と凸包Ｂ′間の最接近ベクトルを求め、該ベクトルを与える２つの端点ｐ，ｑを最接近点とする。又、図６１（ｂ）のように、凸要素ＣＢ１，ＣＢ２と凸包Ａ′間の立場を入れ替えた場合において、凸包と凸要素間の干渉が存在しない場合には、凸要素ＣＢ１，ＣＢ２と凸包Ａ′間の最接近ベクトルを求め、該ベクトルを与える２つの端点ｐ′，ｑ′を最接近点とする。
【０１５４】
図６２は凸包の動的構成／解除アルゴリズムの処理フローである。
非凸多面体Ａ，Ｂの凸包Ａ′、Ｂ′間に干渉チェック処理（最接近探索処理）を施し、最接近点間の距離ｒ（Ａ′，Ｂ′）を求める。ついで、ｒ（Ａ′，Ｂ′）とεＣＨの大小を判断する（ステップ２４０１）。εＣＨはユーザ定義の微小定数である。
ｒ（Ａ′，Ｂ′）＞εＣＨの場合には凸包Ａ′、Ｂ′は干渉しないから、凸包Ａ′、Ｂ′間の最接近点を非凸多面体Ａ，Ｂ間の最接近点とし、出力する（ステップ２４０２）。以後、凸包を維持したまま上記処理を繰り返す。
一方、ｒ（Ａ′，Ｂ′）≦εＣＨの場合には、凸包同士が干渉するから一方の凸包、例えば凸包Ａ′を解除する。非凸多面体Ａの凸要素ＣＡｉの和集合を∪ｉＣＡｉと表現する。ついで、凸包Ｂ′と各凸要素ＣＡｉ間の距離ｒ（ＣＡｉ，Ｂ′）がεＣＣＨ以下の凸要素の部分集合∪ｉＣＣＡｉを求める（ステップ２４０３）。εＣＣＨはユーザ定義の微小定数である。
しかる後、部分集合∪ｉＣＣＡｉを構成する凸要素数が０であるかチェックする（ステップ２４０４）。∪ｉＣＣＡｉ＝０の場合には、ｒ（ＣＡｉ，Ｂ′）のうち最小距離  ＭＩＮｉｒ（ＣＡｉ，Ｂ′）を与える凸要素ＣＡｋを求め、該凸要素ＣＡｋと凸包Ｂ′間の最接近点を求め、該最接近点を非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２４０５）。
【０１５５】
しかし、∪ｉＣＣＡｉ＞０の場合には、他方の凸包Ｂ′を解除する。非凸多面体Ｂの凸要素ＣＢｊの和集合を∪ｊＣＢｊと表現する。ついで、凸包Ａ′と各凸要素ＣＢｊ間の距離ｒ（ＣＢｊ，Ａ′）がεＣＣＨ以下の凸要素の部分集合∪ｊＣＣＢｊを求める（ステップ２４０６）。
しかる後、部分集合∪ｊＣＣＢｊを構成する凸要素数が０であるかチェックする（ステップ２４０７）。∪ｊＣＣＢｊ＝０の場合には、ｒ（ＣＢｊ，Ａ′）のうち最小距離  ＭＩＮｊｒ（ＣＢｊ，Ａ′）を与える凸要素ＣＢｋを求め、該凸要素ＣＢｋと凸包Ａ′間の最接近点を求め、該最接近点を非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２４０８）。
しかし、∪ｊＣＣＢｊ＞０の場合には、部分集合∪ｉＣＣＡｉと∪ｊＣＣＢｊ間の最小距離  ＭＩＮｉ，ｊ  Ｒ（ＣＣＡｉ，ＣＣＢｊ）を与える凸要素ＣＣＡｐ、ＣＣＢｑを求め、その間の最接近点を求め、非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２４０９）。
以後、初めに戻り以降の処理を繰り返す。
【０１５６】
（Ｒ）干渉チェックサブアルゴリズム
（凸包の動的構成／解除及び凸多面体連続干渉チェック）
非凸多面体に対し、それを包絡する最小の凸多面体として凸包を定義する。非凸多面体間の距離が十分離れている場合には凸包間の連続干渉チェックを行い、凸包同士が干渉し始めたら、非凸多面体を構成する凸要素間の干渉チェックに自動的に移行する。非凸多面体間の距離が再び大きくなった場合には、凸包が回復し、凸包間の連続干渉チェックに戻す。
図６３は凸包の動的構成／解除及び凸多面体連続干渉チェックのアルゴリズムの処理フロー、図６４〜図６６はその説明図である。
非凸多面体Ａ，Ｂの凸包Ａ′、Ｂ′間に干渉チェック処理（最接近探索処理）を施し、最接近点間の距離ｒ（Ａ′，Ｂ′）を求める。ついで、ｒ（Ａ′，Ｂ′）とεＣＨの大小を判断する。又、フラグｃｏｎｔｆｌｇＡ′＝１とする（ステップ２５０１）。ｒ（Ａ′，Ｂ′）＞εＣＨの場合には凸包Ａ′、Ｂ′は干渉しないから、凸包Ａ′、Ｂ′間の最接近点を非凸多面体Ａ，Ｂ間の最接近点とし、出力する（ステップ２５０２）。以後、凸包を維持したまま上記処理を繰り返す。
【０１５７】
図６４はステップ２５０１、２５０２のプロセスを具体的に示すものである。図６４に示すとおり、凸包間の干渉チェックでは、初回のサポート関数ｈの計算は、全点に対する内積計算に基づいて算出されるが、次回以降は連続型干渉チェックのアルゴリズムに基づいて算出される。すなわち、内積計算は最接近点の近接点に限られる。連続型干渉チェックでは、前回の最接近点情報を保持しておくことが必要であるが、この情報は、凸包Ａ′、Ｂ′の片方の属性として保持される。ステップ２５０２の過程では、ｃｏｎｔｆｌｇＡ′＝１のフラグが立ち、（Ａ′，Ｂ′）間の干渉チェックが連続型となる。
ステップ２５０１において、ｒ（Ａ′，Ｂ′）≦εＣＨの場合には、凸包同士が干渉するから一方の凸包、例えば凸包Ａ′を解除する。非凸多面体Ａの凸要素ＣＡｉの和集合を∪ｉＣＡｉと表現する。ついで、凸包Ｂ′と各凸要素ＣＡｉ間の距離ｒ（ＣＡｉ，Ｂ′）がεＣＣＨ以下の凸要素の部分集合∪ｉＣＣＡｉを求める。又、フラグｃｏｎｔｆｌｇＣＣＡ１＝１とする（ステップ２５０３）。
【０１５８】
しかる後、部分集合∪ｉＣＣＡｉを構成する凸要素数が０であるかチェックする（ステップ２５０４）。∪ｉＣＣＡｉ＝０の場合には、ｒ（ＣＡｉ，Ｂ′）のうち最小距離  ＭＩＮｉｒ（ＣＡｉ，Ｂ′）を与える凸要素ＣＡｋを求め、該凸要素ＣＡｋと凸包Ｂ′間の最接近点を求める。そして、該最接近点を非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２５０５）。ｒ（ＣＡｉ，Ｂ′）は連続型干渉チェックで求める。
【０１５９】
図６５（ａ）は、ステップ２５０３〜２５０５の具体的な説明図である。連続型干渉チェックにおける前回の最接近点情報は、非凸多面体Ａの凸要素ＣＡｉの属性として保持される。ステップ２５０３においてｃｏｎｔｆｌｇＣＣＡ１＝１のフラグが立ち、ステップ２５０５における（ＣＡｉ，Ｂ′）間の干渉チェックは連続型となる。
ステップ２５０４において、∪ｉＣＣＡｉ＞０の場合には他方の凸包Ｂ′を解除する。非凸多面体Ｂの凸要素ＣＢｊの和集合を∪ｊＣＢｊと表現する。ついで、凸包Ａ′と各凸要素ＣＢｊ間の距離ｒ（ＣＢｊ，Ａ′）がεＣＣＨ以下の凸要素の部分集合∪ｊＣＣＢｊを求める。又、フラグｃｏｎｔｆｌｇＣＣＢ１＝１とする（ステップ２５０６）。
しかる後、部分集合∪ｊＣＣＢｊを構成する凸要素数が０であるかチェックする（ステップ２５０７）。∪ｊＣＣＢｊ＝０の場合には、ｒ（ＣＢｊ，Ａ′）のうち最小距離  ＭＩＮｊｒ（ＣＢｊ，Ａ′）を与える凸要素ＣＢｋを求め、該凸要素ＣＢｋと凸包Ａ′間の最接近点を求め、該最接近点を非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２５０８）。
【０１６０】
図６５（ｂ）は、ステップ２５０６〜２５０８の具体的な説明図である。連続型干渉チェックにおける前回の最接近点情報は、非凸多面体Ｂの凸要素ＣＢｊの属性として保持される。ステップ２５０６においてｃｏｎｔｆｌｇＣＣＢｊ＝１のフラグが立ち、ステップ２５０８における（ＣＡｉ，Ｂ′）間の干渉チェックは連続型となる。
ステップ２５０７において、∪ｊＣＣＢｊ＞０の場合には、部分集合∪ｉＣＣＡｉと∪ｊＣＣＢｊ間の最小距離  ＭＩＮｉ，ｊ  Ｒ（ＣＣＡｉ，ＣＣＢｊ）を与える凸要素ＣＣＡｐ、ＣＣＢｑを求め、その間の最接近点を求め、非凸多面体Ａ，Ｂ間の最接近点として出力する。又、全てのフラグｃｏｎｔｆｌｇＡ′、ｃｏｎｔｆｌｇＢ′、ｃｏｎｔｆｌｇＣＣＡ１、ｃｏｎｔｆｌｇＣＣＢｊを０にリセットする（ステップ２５０９）。以後、初めに戻り以降の処理を繰り返す。図６６は以上の流れを全体的に示す説明図である。
【０１６１】
（Ｓ）干渉チェックサブアルゴリズム
（凸包の動的構成／解除及び包絡球干渉チェック）
非凸多面体に対し、それを包絡する最小の凸多面体として凸包を定義する。非凸多面体間の距離が十分離れている場合には凸包を包絡する凸包包絡球同士の干渉チェックを行い、凸包包絡球同士が干渉し始めたら凸包同士の干渉チェックを行う。凸包同士が干渉し始めたら、非凸多面体を構成する凸要素に対して、包絡球干渉チェックと凸多面体干渉チェックを行う。非凸多面体間の距離に応じて包絡球干渉チェックと凸包の構成／解除が動的に切り替わる。
図６７は凸包の動的構成／解除及び包絡球干渉チェックの処理フローである。
各非凸多面体Ａ，Ｂの包絡球半径ＲＡ，ＲＢ、包絡球中心ＰＣＡ，ＰＣＢを求め（ステップ２５０１、２５０２）、各包絡球の中心間距離ｒを次式
ｒ＝｜ＰＣＡ−ＰＣＢ｜
により求め、
ｒ≦（ＲＡ＋ＲＢ）かチェックする（ステップ２５０３）。
【０１６２】
ｒ＞（ＲＡ＋ＲＢ）であれば干渉なしと判定し、最接近点間距離としてｒを出力する（ステップ２５０４）。ｒ≦（ＲＡ＋ＲＢ）であれば、非凸多面体Ａ，Ｂの凸包Ａ′、Ｂ′間に干渉チェック処理（最接近探索処理）を施し、最接近点間の距離ｒ（Ａ′，Ｂ′）を求める。ついで、ｒ（Ａ′，Ｂ′）とεＣＨの大小を判断する（ステップ２５０５）。
ｒ（Ａ′，Ｂ′）＞εＣＨの場合には凸包Ａ′、Ｂ′は干渉しないから、凸包Ａ′、Ｂ′間の最接近点を非凸多面体Ａ，Ｂ間の最接近点とし、出力する（ステップ２５０６）。
一方、ｒ（Ａ′，Ｂ′）≦εＣＨの場合には、凸包同士が干渉するから一方の凸包、例えば凸包Ａ′を解除する。非凸多面体Ａの凸要素ＣＡｉの和集合を∪ｉＣＡｉと表現する。ついで、各凸要素ＣＡｉの包絡球と非凸多面体Ｂの包絡球間の干渉チェックを行い、干渉する各凸要素ＣＡｉと凸包Ｂ′間で干渉チェックを行う。しかる後、凸包Ｂ′と各凸要素ＣＡｉ間の距離ｒ（ＣＡｉ，Ｂ′）がεＣＣＨ以下の凸要素の部分集合∪ｉＳＣＣＡｉを求める（ステップ２５０７）。
【０１６３】
ついで、部分集合∪ｉＳＣＣＡｉを構成する凸要素数が０であるかチェックする（ステップ２５０８）。∪ｉＳＣＣＡｉ＝０の場合には、ｒ（ＣＡｉ，Ｂ′）のうち最小距離  ＭＩＮｉｒ（ＣＡｉ，Ｂ′）を与える凸要素ＣＡｋを求め、該凸要素ＣＡｋと凸包Ｂ′間の最接近点を求め、該最接近点を非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２５０９）。
∪ｉＳＣＣＡｉ＞０の場合には、他方の凸包Ｂ′を解除する。非凸多面体Ｂの凸要素ＣＢｊの和集合を∪ｊＣＢｊと表現する。ついで、各凸要素ＣＢｊの包絡球と非凸多面体Ａの包絡球間の干渉チェックを行い、干渉する各凸要素ＣＢｊと凸包Ａ′間で干渉チェックを行う。しかる後、凸包Ａ′と各凸要素ＣＢｊ間の距離ｒ（ＣＢｊ，Ａ′）がεＣＣＨ以下の凸要素の部分集合∪ｊＳＣＣＢｊを求める（ステップ２５１０）。ついで、部分集合∪ｊＳＣＣＢｊを構成する凸要素数が０であるかチェックする（ステップ２５１１）。∪ｊＳＣＣＢｊ＝０の場合には、ｒ（ＣＢｊ，Ａ′）のうち最小距離  ＭＩＮｉｒ（ＣＢｊ，Ａ′）を与える凸要素ＣＢｋを求め、該凸要素ＣＢｋと凸包Ａ′間の最接近点を求め、該最接近点を非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２５１２）。
【０１６４】
しかし、∪ｊＳＣＣＢｊ＞０の場合には、部分集合∪ｉＳＣＣＡｉと∪ｊＳＣＣＢｊ間の最小距離  ＭＩＮｉ，ｊ  ｒ（ＳＣＣＡｉ，ＳＣＣＢｊ）を与える凸要素ＳＣＣＡｐ、ＳＣＣＢｑを求め、その間の最接近点を求め、非凸多面体Ａ，Ｂ間の最接近点として出力する（ステップ２５１３）。
以後、初めに戻り以降の処理を繰り返す。
尚、図６７のアルゴリズムに図６３の凸多面体の連続干渉チェック処理を組み込むことにより、干渉チェックを高速化することができる。
【０１６５】
（Ｔ）干渉チェックシステムの構成
図６８は本発明の干渉チェックシステムの構成図であり、２１は形状モデルを生成してポリゴンデータファイルを出力する三次元ＣＡＤシステム、２２はポリゴンデータファイルや前処理により求めた凸要素データ、近接点多分木リスト、近接点線形リスト等を記憶するメモリ、２３はポリゴンデータファイルより近接点多分木リストを作成する近接点多分木リスト作成部、２４は近接点多分木リストより近接点線形リストを生成する近接点線形リスト作成部、２５は非凸多面体を凸要素の集合に分解する凸分解部、２６は干渉チェック部、２７は近接点線形リストを外部記録媒体に出力すると共に、適宜読み出してメモリ２２に展開するリスト入出力部、２８はハードディスク等の外部記録媒体である。
【０１６６】
（Ｕ）本発明の応用分野
本発明は以下のような分野における応用が可能である。
（ａ）  機構設計用ＣＡＤシステム
機構設計では、製品を組み立てる時に不用意な干渉が度々発生する。このようなことを事前に防ぐためには、機構設計用ＣＡＤシステム上にて部品間の接合関係、マージンを入念にチェックしておくことが重要になる。リアルタイム干渉チェックシステムを機構設計用ＣＡＤシステムに組み込むことにより、実際の製品に近い形での事前チェックが可能となる。
（ｂ）  移動ロボットの経路計画
マニピュレータや自走車などの移動ロボットでは、他の物体と衝突しないよう経路計画を事前に行った後に駆動させる場合が多い。例えば、マニピュレータを使った部品組立てにおいては、部品間の干渉、部品とマニピュレータ間との干渉をチェックしながら経路計画をする必要がある。また、掃除ロボット、警護ロボット、運搬ロボットなどの自走ロボットでは、地点間の移動において壁や柱又は机等の障害物との衝突を回避した経路計画が必要である。かかる場合、マニピュレータあるいはロボット制御部に高速の干渉チェックシステムを組込み、事前にチェックする方法が有効である。
【０１６７】
（ｃ）  マルチメディアにおけるアニメーション作成
アニメーションの分野では、グラフィックコンピュータを用いたリアリティの高いアニメーションの作成が望まれている。例えば、アンドロイドモデルを歩かせる場合には、アンドロイドモデルと地上との接触問題を解かなければならず、又、自動車の衝突をシミュレーションする場合には、まさしく自動車間の干渉問題を解く必要がある。
（ｄ）  ゲームソフト
従来のゲームソフトはもっぱら二次元的なものが多かったが、今後は、グラフコンピュータを使い、三次元的に表示するものが主流になると予想される。ゲームソフトでは、例えば、シュ−ティングゲームにおけるミサイルと戦闘機の衝突、レーシングゲームにおける車同士の衝突など物体間の干渉問題が多い。
本発明のリアルタイム干渉チェックシステムは、上記応用分野において強力な手段を提供するものである。
以上、本発明を実施例により説明したが、本発明は請求の範囲に記載した本発明の主旨に従い種々の変形が可能であり、本発明はこれらを排除するものではない。
【０１６８】
【発明の効果】
以上本発明によれば、前処理において近接点線形リストを作成し、干渉チェックに際して最新に求まっている最接近点に近接する頂点を該近接点線形リストより求め、これら頂点の中より次の時刻における最接近点を連続的に探索するようにしたから、全ての頂点に最接近点探索処理を施す必要がないため、高速に干渉チェックを行うことができる。
又、包絡球や凸包を生成し、離れている場合にはこれら包絡球や凸包を用いて干渉チェックを行うようにしたから、高速の干渉チェックを行うことができる。
【図面の簡単な説明】
【図１】本発明の原理説明図である。
【図２】凸多面体の表面多角形への分解説明図（６面体の場合）である。
【図３】最接近点探索のための凸多面体データ構造説明図（６面体の場合）である。
【図４】本発明の第１の最接近点探索方法の処理フロー図である。
【図５】凸多面体データ入力の説明図である。
【図６】第１の最接近点探索装置の構成図である。
【図７】凸多面体の三角形分割説明図である。
【図８】多角形の三角形分割説明図である。
【図９】第２の最接近点探索方法の処理フロー図である。
【図１０】第２の最接近点探索装置の構成図である。
【図１１】マージング処理説明図である。
【図１２】マージングデータ構造の説明図である。
【図１３】マージングアルゴリズムの流れ図である。
【図１４】凸包データ説明図である。
【図１５】タスクによるマージング処理の説明図である。
【図１６】Ｗｈｉｌｅ文を用いたマージング処理の説明図である。
【図１７】環境が動的に変化する場合の本発明の説明図（その１）である。
【図１８】環境が動的に変化する場合の本発明の説明図（その２）である。
【図１９】マージング及びリカバリ処理説明図である。
【図２０】Ｗｈｉｌｅ文を用いたリカバリ処理の説明図である。
【図２１】非凸多面体間の最接近点探索の全体の処理フロー図である。
【図２２】本発明の非凸多面体間の最接近点探索装置の構成図である。
【図２３】非凸多面体間の最接近点連続探索の第１の方法説明図である。
【図２４】非凸多面体間の第１の最接近点連続探索処理のフロー図である。
【図２５】非凸多面体間の最接近点連続探索の第２の方法説明図である。
【図２６】非凸多面体間の第２の最接近点連続探索処理のフロー図である。
【図２７】システム構成図である。
【図２８】干渉チェック前処理の概略的処理フローである。
【図２９】凸分解基本アルゴリズムの処理フローである。
【図３０】Ｍｅｒｇｅプロセスの流れ図である。
【図３１】ポリゴン間の凹凸関係判定説明図である。
【図３２】凸分解前処理の第２実施例処理フローである。
【図３３】ブール集合演算による物体表現説明図である。
【図３４】凸分解前処理の第３実施例処理フローである。
【図３５】負物体がある場合の凸分割の結果説明図である。
【図３６】凸分解前処理の第４実施例処理フローである。
【図３７】本発明の干渉チェック前処理の別の概略的処理フローである。
【図３８】高速凸分解基本アルゴリズムのフロー図である。
【図３９】Ｍｅｒｇｅプロセスの流れ図である。
【図４０】干渉チェックアルゴリズムの概略処理フローである。
【図４１】Ｇｉｌｂｅｒｔ法による干渉チェック原理説明図である。
【図４２】Ｇｉｌｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定のフローである。
【図４３】簡略化したＧｉｌｂｅｒｔ法に基づくＭｅｒｇｅ可能性判定のフローである。
【図４４】凸分解の第１変形例の処理フローである。
【図４５】凸分解の第２変形例の処理フローである。
【図４６】近接点リストの例である。
【図４７】近接点線形リスト作成の前処理フローである。
【図４８】三角形ポリゴンに分割した直方体及びポリゴンデータの説明図である。
【図４９】凸要素毎のポリゴンデータ説明図である。
【図５０】近接点線形リストを生成するアルゴリズムの説明図である。
【図５１】近接点線形リストを生成するアルゴリズムの別の説明図である。
【図５２】近接点線形リストの作成説明図である。
【図５３】近接点多分木リストの例である。
【図５４】近接点多分木リスト作成の前処理フローである。
【図５５】近接点線形リストのダンプファイルフォーマット説明図である。
【図５６】包絡球による事前チェックアルゴリズムのフローである。
【図５７】Ｇｉｌｂｅｒｔ法の基本的な考え方の説明図である。
【図５８】凸多面体における連続的干渉チェックアルゴリズムのフローである。
【図５９】非凸多面体の説明図である。
【図６０】凸包の動的構成／解除の基本的な考え方の説明図である。
【図６１】凸包、凸要素間の干渉チェック説明図である。
【図６２】凸包の動的構成／解除アルゴリズムののフローである。
【図６３】凸包の動的構成／解除及び凸多面体連続干渉チェックのフローである。
【図６４】凸包間の連続型干渉チェックの説明図である。
【図６５】凸要素、凸包間の連続型干渉チェックの説明図である。
【図６６】凸要素間の干渉チェック説明図である。
【図６７】凸包の動的構成／解除及び包絡球干渉チェックアルゴリズムのフローである。
【図６８】干渉チェックシステムの構成図である。
【図６９】最接近点アルゴリズムの解決すべき点の説明図（その１）である。
【図７０】最接近点アルゴリズムの解決すべき点の説明図（その２）である。
【図７１】サポート関数の説明図である。
【図７２】Ｇｉｌｂｅｒｔ法による最接近点探索の説明図である。
【図７３】Ｇｉｌｂｅｒｔ法の説明図である。
【図７４】Ｇｉｌｂｅｒｔ法の数値試験結果説明図である。
【図７５】Ｇｉｌｂｅｒｔ法による非凸多面体間の最接近点探索の説明図である。
【符号の説明】
２２ａ・・ポリゴンデータ記憶部
２２ｂ・・近接点線形リスト記憶部
２４・・近接点線形リスト作成部
２６・・最接近点探索処理部
【図１】
0003556644.tif 000013
【図２】
0003556644.tif 000014
【図３】
0003556644.tif 000015
【図４】
0003556644.tif 000016
【図５】
0003556644.tif 000017
【図６】
0003556644.tif 000018
【図７】
0003556644.tif 000019
【図８】
0003556644.tif 000020
【図９】
0003556644.tif 000021
【図１０】
0003556644.tif 000022
【図１１】
0003556644.tif 000023
【図１２】
0003556644.tif 000024
【図１３】
0003556644.tif 000025
【図１４】
0003556644.tif 000026
【図１５】
0003556644.tif 000027
【図１６】
0003556644.tif 000028
【図１７】
0003556644.tif 000029
【図１８】
0003556644.tif 000030
【図１９】
0003556644.tif 000031
【図２０】
0003556644.tif 000032
【図２１】
0003556644.tif 000033
【図２２】
0003556644.tif 000034
【図２３】
0003556644.tif 000035
【図２４】
0003556644.tif 000036
【図２５】
0003556644.tif 000037
【図２６】
0003556644.tif 000038
【図２７】
0003556644.tif 000039
【図２８】
0003556644.tif 000040
【図２９】
0003556644.tif 000041
【図３０】
0003556644.tif 000042
【図３１】
0003556644.tif 000043
【図３２】
0003556644.tif 000044
【図３３】
0003556644.tif 000045
【図３４】
0003556644.tif 000046
【図３５】
0003556644.tif 000047
【図３６】
0003556644.tif 000048
【図３７】
0003556644.tif 000049
【図３８】
0003556644.tif 000050
【図３９】
0003556644.tif 000051
【図４０】
0003556644.tif 000052
【図４１】
0003556644.tif 000053
【図４２】
0003556644.tif 000054
【図４３】
0003556644.tif 000055
【図４４】
0003556644.tif 000056
【図４５】
0003556644.tif 000057
【図４６】
0003556644.tif 000058
【図４７】
0003556644.tif 000059
【図４８】
0003556644.tif 000060
【図４９】
0003556644.tif 000061
【図５０】
0003556644.tif 000062
【図５１】
0003556644.tif 000063
【図５２】
0003556644.tif 000064
【図５３】
0003556644.tif 000065
【図５４】
0003556644.tif 000066
【図５５】
0003556644.tif 000067
【図５６】
0003556644.tif 000068
【図５７】
0003556644.tif 000069
【図５８】
0003556644.tif 000070
【図５９】
0003556644.tif 000071
【図６０】
0003556644.tif 000072
【図６１】
0003556644.tif 000073
【図６２】
0003556644.tif 000074
【図６３】
0003556644.tif 000075
【図６４】
0003556644.tif 000076
【図６５】
0003556644.tif 000077
【図６６】
0003556644.tif 000078
【図６７】
0003556644.tif 000079
【図６８】
0003556644.tif 000080
【図６９】
0003556644.tif 000081
【図７０】
0003556644.tif 000082
【図７１】
0003556644.tif 000083
【図７２】
0003556644.tif 000084
【図７３】
0003556644.tif 000085
【図７４】
0003556644.tif 000086
【図７５】
0003556644.tif 000087