(57)【要約】【課題】  組立品の物体形状が複雑になり構成面の数が莫大になると、所定点から所定範囲内にある組立品上への最近接点を求める処理に莫大な時間がかかってしまう。【解決手段】  所定の空間領域内にある立体について、該空間領域上の所定の点からの最近接点を算出するにあたり、ステップS1で前記立体を構成する各稜線に対する近接構成面を抽出し、ステップS2〜S6で該抽出された近接構成面のそれぞれについて、対応する稜線から所定範囲内にある部分領域を算出しておく。この前処理により、空間領域内の所定点について近接点を持ち得る構成面の数を絞り込むことができるため、処理を高速化することができる。【選択図】  図1A
2006277349.tif 000002
【特許請求の範囲】
【請求項１】
所定の空間領域内にある立体について、該空間領域上の所定の点からの最近接点を算出する近接点算出方法であって、
前記立体を構成する各稜線に対する近接構成面を抽出する構成面抽出ステップと、
該抽出された近接構成面のそれぞれについて、対応する稜線から所定範囲内にある部分領域を算出する部分領域算出ステップと、
前記空間領域内の所定点と前記部分領域との位置関係に応じて、該所定点から前記立体に対する最近接点を算出する近接点算出ステップと、
を有することを特徴とする近接点算出方法。
【請求項２】
前記部分領域算出ステップは、
前記構成面抽出ステップで抽出された近接構成面から所定範囲内にある近傍空間領域を算出し、該近傍空間領域と前記空間領域との共通領域を前記部分領域とする共通領域算出ステップと、
該共通領域算出ステップで算出された部分領域を、前記近接構成面に隣接する構成面に応じて絞り込む絞込みステップと、
を有することを特徴とする請求項１に記載の近接点算出方法。
【請求項３】
前記絞込みステップは、
前記構成面抽出ステップで抽出された近接構成面間の隣接関係を認識する隣接関係認識ステップと、
該隣接関係認識ステップにおいて隣接していると認識された構成面対に対するボロノイマップを作成するボロノイマップ作成ステップと、
該ボロノイマップに基づいて、各近接構成面に対する近接空間領域を作成する近接領域作成ステップと、
前記近接空間領域に基づいて前記部分領域を更新する部分領域更新ステップと、
を有することを特徴とする請求項２記載の近接点算出方法。
【請求項４】
前記共通領域算出ステップは、
前記近傍空間領域として前記近接構成面からεの範囲内にあるε近傍立体を作成し、該ε近傍立体に含まれる前記稜線の範囲を前記部分領域として算出することを特徴とする請求項２または３記載の近接点算出方法。
【請求項５】
前記構成面は三角形パッチであり、
前記共通領域算出ステップにおいては、前記三角形パッチに対する近傍空間領域を球と円筒面と三角柱の和形状であるとして表現する
ことを特徴とする請求項２または３記載の近接点算出方法。
【請求項６】
前記共通領域算出ステップにおいてはさらに、前記空間領域が線分であるとき、該線分と前記構成面に対する近傍空間領域との積領域を算出することによって前記部分領域を求める
ことを特徴とする請求項５記載の近接点算出方法。
【請求項７】
前記ボロノイマップ作成ステップにおいては、前記隣接していると認識された構成面対がいずれも平面であるとき、該二平面に対するボロノイマップを作成すること
を特徴とする請求項３記載の近接点算出法。
【請求項８】
前記部分領域更新ステップにおいては、前記空間領域が線分であるとき、前記近接領域作成ステップにおいて作成された近接空間領域と既存の部分領域との積によって前記部分領域を更新する
ことを特徴とする請求項７記載の近接点算出法。
【請求項９】
前記構成面抽出ステップは、
前記空間領域がある立体の稜線であるとき、所定の組立品の各部品間の接続関係を認識する部品認識ステップと、
該部品のそれぞれに対して作成された、該部品を構成する各面の包含矩形を葉とする構成面包含矩形木と、前記部品認識ステップで認識された各部品間の接続関係とに基づいて、近接する構成面対を算出する構成面対算出ステップと、
前記構成面対に基づいて、該構成面を構成する各稜線に対する近接構成面のリストを作成するリスト作成ステップと、
を有することを特徴とする請求項１乃至８のいずれかに記載の近接点算出法。
【請求項１０】
前記部品認識ステップは、
前記組立品の各部品の包含矩形を葉とする部品包含矩形木を作成する部品矩形木作成ステップと、
前記各部品について、部品を構成する各面の包含矩形を葉とする構成面包含矩形木を作成する構成面矩形木作成ステップと、
を有し、前記部品包含矩形木および前記構成面包含矩形木に基づいて該部品間の接続関係を認識する、
ことを特徴とする請求項９記載の近接点算出法。
【請求項１１】
前記近接点算出ステップにおいては、前記空間領域内の所定点が前記部分領域に含まれるか否かに応じて、該所定点から前記立体に対する最近接点を算出することを特徴とする請求項１乃至１０のいずれかに記載の近接点算出方法。
【請求項１２】
所定の空間領域内にある立体について、該空間領域上の所定の点からの最近接点を算出する近接点算出装置であって、
前記立体を構成する各稜線に対する近接構成面を抽出する構成面抽出手段と、
該抽出された近接構成面のそれぞれについて、対応する稜線から所定範囲内にある部分領域を算出する部分領域算出手段と、
前記空間領域内の所定点と前記部分領域との位置関係に応じて、該所定点から前記立体に対する最近接点を算出する近接点算出手段と、
を有することを特徴とする近接点算出装置。
【請求項１３】
前記部分領域算出手段は、
前記構成面抽出手段で抽出された近接構成面から所定範囲内にある近傍空間領域を算出し、該近傍空間領域と前記空間領域との共通領域を前記部分領域とする共通領域算出手段と、
該共通領域算出手段で算出された部分領域を、前記近接構成面に隣接する構成面に応じて絞り込む絞込み手段と、
を有することを特徴とする請求項１２に記載の近接点算出装置。
【請求項１４】
前記絞込み手段は、
前記構成面抽出手段で抽出された近接構成面間の隣接関係を認識する隣接関係認識手段と、
該隣接関係認識手段で隣接していると認識された構成面対に対するボロノイマップを作成するボロノイマップ作成手段と、
該ボロノイマップに基づいて、各近接構成面に対する近接空間領域を作成する近接領域作成手段と、
前記近接空間領域に基づいて前記部分領域を更新する部分領域更新手段と、
を有することを特徴とする請求項１３記載の近接点算出装置。
【請求項１５】
情報処理装置を制御することによって、該情報処理装置上で請求項１乃至１１の何れかに記載された近接点算出方法を実現させることを特徴とするプログラム。
【請求項１６】
請求項１５に記載されたプログラムが記録されたことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は近接点算出方法および装置に関し、特に所定の空間領域内にある立体について、該空間領域上の所定の点からの最近接点を算出する近接点算出方法および装置に関する。
【背景技術】
【０００２】
従来より、製品設計などの過程で、組立品の形状情報に基づいた処理において、所定の点から指定許容誤差以内にある組立品上への最近接点を求めるという処理がしばしば必要となる。例えば、製品の組立形状が絶縁距離の規格を満たしているかを判定する処理においては、組立品表面に沿った部品間の最短距離を算出する必要があり、この算出処理において上記のような最近接点を求めることが必要となる。なぜなら、最短経路が二部品以上にまたがる場合、部品が接触しているところでは、経路はある部品の一点から接触している別部品の最近接点への直線経路を通過するからである。
【０００３】
この例の場合、単純にある点からの他の部品への最近接点を求めるのではなく、接触している部品上の指定許容誤差以内にある最近接点を求める必要がある。なぜなら、組立品の情報を有限の桁数の計算機などで扱う場合、計算機の機能や、情報を与える過程において、計算の途中や入力値などにより誤差が発生するため、接触しているか否かを判定する際には、これらの誤差を考慮する必要があるからである。
【０００４】
従来、立体間の最近接点を求める手法としては、特許文献１に記述されているように各立体を構成する構成面どうしの最近接点を求めたり、特許文献１や非特許文献１に示される手法のように各構成面を包含する図形およびそのツリー構造などを用いて、最近接する可能性のある構成面間のペアを効率的に探索することによって、処理の高速化を図っていた。
【０００５】
従って、所定の点からの組立品上の最近接点を求めたい場合には、特許文献１の段落番号[0004]に記載された手法と同様に、所定の点から、各組立品を構成する各部品形状の各構成面に対して最短距離をそれぞれ求め、最も小さい最短距離の構成面上における最短距離の足（接触点）を求めることにより、最近接点を得ることができる。
【０００６】
あるいは、上述した所定の点を含む包含図形を定義することにより、特許文献１や非特許文献１のような包含図形およびそのツリー構造を用いた処理により、該所定の点を包含する図形に近接する構成面を予め絞り込むことによって、上記処理を高速化することができる。
【特許文献１】特登録02915826号
【非特許文献１】S.Gottschalk,M.C.Lin and D.Manocha,"OBBTree:A Hierarchical Structure for Rapid Interference Detection," In Proc. of ACM Siggraph'96,pages 171-180,1996
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、組立品の物体の形状が複雑になり、物体の形状を構成する三角パッチなどの構成面の数が莫大になると、上記のような処理では莫大な時間がかかることがある。なぜなら、対象とする部品の構成面の数が膨大になると、すべての面を最近接点が存在する可能性のある面として処理する必要があるためである。
【０００８】
例えば、組立品を構成する各部品形状の構成面の総和がNであるとすると、一回の近接点を探すのに点と構成面との最短距離計算をN回行わなければならない。特に、このような処理を多数回行う必要がある場合には、なおさら計算の高速化が必要となる。例えば、M回の近接点算出処理を行う必要がある場合、全体でM×N回の最短距離計算を行わなければならない。一般に、複雑な組立品形状を扱う場合には、上記M,Nで示される回数は非常に大きくなるため、計算処理時間が非常にかかってしまう。たとえ、上述した特許文献１や非特許文献１に記載された包含図形およびそのツリー構造を用いた処理を利用したとしても、やはり与えた所定の点ごとに上記の処理を行う必要があるため、処理速度の向上には限界があった。
【０００９】
本発明は上述した問題を解決するためになされたものであり、所定の空間領域内にある立体について、該空間領域上の所定点から所定範囲内にある最近接点を高速に算出する近接点算出方法および装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための一手段として、本発明の近接点算出方法は以下のステップを備える。
【００１１】
すなわち、所定の空間領域内にある立体について、該空間領域上の所定の点からの最近接点を算出する近接点算出方法であって、前記立体を構成する各稜線に対する近接構成面を抽出する構成面抽出ステップと、該抽出された近接構成面のそれぞれについて、対応する稜線から所定範囲内にある部分領域を算出する部分領域算出ステップと、前記空間領域内の所定点と前記部分領域との位置関係に応じて、該所定点から前記立体に対する最近接点を算出する近接点算出ステップと、を有することを特徴とする。
【００１２】
例えば、前記部分領域算出ステップは、前記構成面抽出ステップで抽出された近接構成面から所定範囲内にある近傍空間領域を算出し、該近傍空間領域と前記空間領域との共通領域を前記部分領域とする共通領域算出ステップと、該共通領域算出ステップで算出された部分領域を、前記近接構成面に隣接する構成面に応じて絞り込む絞込みステップと、を有することを特徴とする。
【００１３】
例えば、前記絞込みステップは、前記構成面抽出ステップで抽出された近接構成面間の隣接関係を認識する隣接関係認識ステップと、該隣接関係認識ステップにおいて隣接していると認識された構成面対に対するボロノイマップを作成するボロノイマップ作成ステップと、該ボロノイマップに基づいて、各近接構成面に対する近接空間領域を作成する近接領域作成ステップと、前記近接空間領域に基づいて前記部分領域を更新する部分領域更新ステップと、を有することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、所定の空間領域内にある立体について、該空間領域上の所定点から所定範囲内にある最近接点を高速に算出することができる。
【発明を実施するための最良の形態】
【００１５】
以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。
【００１６】
＜第1実施形態＞
本実施形態においては、本発明による近接点算出方法を利用して、組立品における各部品形状の稜線上にある任意の点から、近接している他部品上への近接点を求める処理について説明する。ここで、部品の構成面はすべて三角形パッチで表現されており、各三角形パッチ間の隣接関係情報はすでに得られているものとする。また、構成面がすべて三角形パッチで表現されているため、稜線もすべて線分であるものとする。
【００１７】
一般に、構成面は平面、円筒面、球面、円錐面、トーラス面、Coons曲面、Bezier曲面、Rational Bezier曲面、B-Spline 曲面、NURBS曲面、などの自由曲面等の幾何形状および、その幾何形状が表現する領域のうちどの部分が構成面になっているかを表現するループ情報などの境界情報により表現される。これらの構成面より構成される任意の立体に関しても、本実施形態で説明するような、各構成面の包含矩形、近傍立体、二構成面間の局所ボロノイマップ、所定の領域と近傍立体の積領域、局所ボロノイマップによって得られた近接空間と所定領域の積領域、既に求められた部分領域と、前記近接空間と所定領域の積領域を求めることができれば、本実施形態で説明する手法は適用可能である。ただし、これらの構成面のすべてが三角形である場合、構成面が上記のような曲面を含む任意の構成面である場合に比べて、上記のような計算は著しく簡単となる。
【００１８】
また、構成面が平面のときは部品は多面体であり、一般に各構成面は多角形となるが、この各構成面である多角形を分割してすべての構成面を三角形パッチにすることが可能であり、これによって本実施形態で説明する処理が任意の多面体に対して適用可能となる。また、上述した、曲面などの任意の構成面よりなる立体も多面体に近似できるため、本実施形態による近接点算出方法により近似的な近接点を求めることが可能となる。
【００１９】
図1Aおよび図1Bは、本実施形態における近接点算出処理の概要を示すフローチャートである。図1Aは、各組立品形状に対してただ一度行われる前処理の流れを示し、図1Bは、図1Aで示す前処理で作成した情報を利用して近接点を求める処理の流れを示す。
【００２０】
まず、図1Aに示すフローチャートに沿って、本実施形態の近接点算出処理における前処理の概要を説明する。
【００２１】
まず、ステップS1で各部品形状の各稜線に対して、指定許容誤差以内で近接している各部品形状の構成面のリストを求める。次にステップS2において、ステップS1で求めた各稜線に対する近接構成面のリストにある各構成面に対して、着目する稜線のどの範囲に対して指定許容誤差以内で隣接するかを求める。この処理は、各構成面の近傍空間を表現する立体を作成・利用することにより行われる。
【００２２】
そしてステップS3〜S6において、ステップS2で求められた各近接構成面に対し、その構成面上で近接点を持ち得る稜線上の部分領域を初期領域として、隣接する構成面間の局所的なボロノイマップを利用してさらに部分領域を絞り込んでいく。
【００２３】
まずステップS3では、準備として上記の指定許容誤差以内で近接している構成面リスト間の隣接関係を認識して、隣接している構成面対のリストを作成する。そしてステップS4,S5では、ステップS3で求めた隣接する近接構成面対ごとに作成した局所的なボロノイマップを利用して、上記各構成面に対して、着目構成面上で近接点を持つ可能性のある着目稜線の部分領域を求める。
【００２４】
詳しくは、まずステップS4において、隣接する構成面に対する局所的なボロノイマップを作成し、次にステップS5では、この局所的なボロノイマップを利用して、着目している近接構成面対のどちらの構成面により近接しているかによって、空間を二つの半空間に分割し、稜線をどちらの半空間に属しているかによって部分領域に分割する。
【００２５】
そしてステップS6では、既に求まっている各構成面が近接点を持ち得る稜線上の部分領域と、ステップS5で得られた着目している構成面対の各構成面に近接する部分領域の積を取ることによって、新たに各構成面が近接点を持つ可能性のある着目稜線上の部分領域を更新する。
【００２６】
ステップS4,S5の処理を、得られた隣接する構成面対ごとに繰り返し行うことによって、各構成面に対してより絞り込まれた稜線上のその構成面に対して近接点を持ち得る部分領域を得ることができる。
【００２７】
以上の図1Aに示した前処理により、各稜線に対して指定許容誤差以内で近接する構成面のリストと、各構成面が稜線上のどの領域の点に対して近接点を持ち得るかの情報が作成される。
【００２８】
次に、図1Aに示した前処理で作成された各稜線に対する近接構成面に関する情報に基づき、近接点を求める処理の概要について、図1Bに沿って説明する。
【００２９】
まず、ステップS7で近接点を求めたい点の稜線上におけるパラメータを求める。次にステップS8で、前記前処理で作成された情報に基づき、ステップS1で得られたパラメータ値を含む領域に対して近接点を持ち得る構成面を抽出する。ここで、抽出された構成面が0である場合は、近接点が存在しないとする。一方、抽出された構成面が1つまたはそれ以上の場合は、ステップS9で抽出された各構成面に対して、近接点を求めたい点と各構成面との距離および各構成面における距離の足を求める。そして最後にステップS10で、最短の距離をもつ構成面に対する距離の足を近接点とする。
【００３０】
もしも、図1Aに示すような前処理を行わず、すなわち近接構成面情報が無かった場合には、図1Bに示す各近接点を求める処理において、近接点を求めたい点とすべての組立形状を構成する構成面との間において距離および距離の足を求める必要がある。組立品形状が複雑になり構成面の数が膨大になると、図1Bに示す処理の時間は膨大なものとなる。したがって、本実施形態で図1Aに示す前処理を行うことが、図1Bによる近接点算出処理に要する時間を短縮する上で有効となる。
【００３１】
図2は、本実施形態による近接点算出処理を実行する装置の一例を示すブロック図である。同図に示すように、本装置はPC内のデータ及びネットワーク上につながっている他の機器とのやりとりを行うデータバス1、図1A,図1Bに示す処理の演算を行うCPU2、処理手順を格納するROM3、処理の対象とするデータを格納する高速な記憶装置RAM4、キーボード、マウス等の入力装置6およびそのインタフェース5、CRTや液晶ディスプレイ8a、プリンタ8b等の表示、出力装置8およびそのインタフェース7、処理の対象および結果となるデータを格納、保存するハードディスク等の記憶装置10およびそのインタフェース9を備えている。
【００３２】
必要なユーザの指示は、入力装置6を用いて行われ、途中の処理状況や最終的な結果は出力装置7を介して報知される。また、処理上必要となるデータは、データバス1を介して、ネットワーク上およびPC1内の入力装置6や記憶装置10からインタフェース5,9を介してRAM4に格納され、CPU1がROM3に格納されたプログラムを実行することによって、該手順に従って利用される。また、処理の段階に応じて一時的に出力されたデータは記憶装置10に格納され、最終的な出力はデータバス1を介してネットワーク上の必要なサーバに格納される。
【００３３】
以下、図1Aおよび図1Bの各ステップについて、より詳細な説明を行う。
【００３４】
まず図1Aに示したステップS1〜S6の各処理について説明する。この処理は、組立品の形状情報に基づいて一度だけ行えばよい。
【００３５】
●ステップS1(近接構成面リスト算出処理)
まずステップS1では、部品形状を構成する各稜線に対して、与えられた許容誤差εの範囲で近接している構成面のリストを算出する。例えば、稜線Eiに対応する近接する近接構成面リストCPLiは、
CPLi  ＝  ｛P1,P2,P3,.....Pn｝
のように表現できる。ここで、Pi(i=1,N)は構成面を示す。
【００３６】
この近接構成面リスト算出処理を、図3に示すフローチャートに従って詳細に説明する。まずステップS11において許容誤差以内で近接する部品対を認識する。次にステップS12において、ステップS11で求められた近接する各部品対に対して、許容誤差以内で近接するパッチ対を算出する。次にステップS13において、ステップS12で求められた各近接パッチ対に対して、一方のパッチの境界を構成する稜線と他方のパッチの稜線が近接するか否かをそれぞれ判定する。そしてステップS14において、ステップS13で各稜線に対して近接すると判定された構成面を各稜線の近接パッチリストに加えることによって、近接構成面リストを更新する。
【００３７】
ここで、ステップS11の許容誤差以内で近接する部品対を認識する処理、及びステップS12の許容誤差以内で近接するパッチ対を求める処理を高速化するために、本実施形態で利用している包含矩形木について説明する。ここで包含矩形とは、ある形状を含むような矩形のことであり、二次元では長方形、三次元では直方体になる。ある形状の包含矩形木とは、その葉ノードが各形状を構成する形状要素の包含矩形であり、中間ノードがその中間ノードの持つ子ノードが包含する形状要素すべてを含むような矩形となっている木構造のことである。
【００３８】
図4を用いて、二次元の包含矩形木について説明する。図4(a)の右端に示されるように、全体の曲線列を分解した各構成曲線に対する包含矩形をB11,B12,B21,B22とすると、図4(a)中央に示すB1はB11,B12を包含する直方体、B2はB21,B22を包含する直方体となり、図4(a)の左端に示すBはB1,B2を包含する直方体となる。これにより、図4(b)に示すような包含矩形木が得られる。
【００３９】
本実施形態では、図4に示したような構成木をトップダウン的に作成している。まず、全体の曲線列を包含する矩形を求め、次にこの矩形を2分割してそれぞれの矩形と交わる構成曲線を求め、その構成曲線群の矩形をそれぞれ求めて、それを上記矩形の子ノードとする。ある矩形がただ一つの構成曲線しか含まない場合は、そこで分割をやめて葉ノードとする。
【００４０】
ここでどのような包含矩形を作るかによって、包含矩形木にはいくつかの種類が知られており、物体の干渉計算を高速に行うなどの処理に広く使われている。例えば、AABB Tree(Axised-Aligned Bounding Box Tree)は各辺が座標軸に平行な矩形を作成し、OBB Tree(Oriented Bounding Box Tree：OBB Treeを用いて物体間の干渉、最短距離を高速化した手法として、S.Gottschalk,M.C.Lin and D.Manocha著、"OBBTree:A Hierarchical Structure for Rapid Interference Detection"、In Proc. of ACM Siggraph'96、171-180頁、1996年参照)は、形状要素群の空間的な広がりを統計的に分析してより包含する形状にフィットした任意の回り向きを持つ矩形を算出する。
【００４１】
図4は、二次元のOBB Treeの例である。AABB Treeは矩形を求める処理が簡易で高速であるが、形状に対して緩やかにフィットしているので、それを利用した処理が遅くなることがある。一方、OBB Treeは矩形を求める処理がやや複雑であるが、それを利用した処理は速くなる傾向がある。本実施形態では、組立品に対しては各構成部品形状の包含矩形を葉とするAABB Treeを、各部品形状に対しては各構成面の包含矩形を葉とするOBB Treeを使用している。これは、経験的に機械形状の場合このような構成が最適であり、一般的に高速な処理を行えるからである。
【００４２】
次に、本実施形態におけるステップS11の近接部品対の認識処理について、図5のフローチャートを用いて詳細に説明する。本処理は、組立品形状に対して指定した許容誤差以内で近接する部品対を認識する処理であり、上述した包含矩形木を使って高速化を図っている。
【００４３】
まずステップS111において、組立品に対して作成したAABB Treeを利用して、部品間の包含矩形間の距離が許容誤差以内である部品対リストを作成する。この部品対リストがすなわち、ラフに近接する可能性のある部品対リストとなっている。次にステップS112において、ステップS111で求めた部品対リストの各部品対に対して、各部品間の距離が指定許容誤差以内にあるかを精密に判定するために、構成面間の包含矩形間の距離が許容誤差以内である構成面対を順次求める。ここで、この処理を高速化するため、それぞれの部品に対して作成したOBB Treeを利用している。次にステップS113では、ステップS112で包含矩形間の距離が許容誤差以内であると判定された構成面対に対して、実際の構成面間の距離を算出する。
【００４４】
そしてステップS114では、ステップS113で求めた距離が指定許容誤差以内であれば、この部品対は接触関係にあると判定し、近接可能性のある部品対としてリストに登録する。そしてステップS115では、ステップS114で作成された近接可能性のある部品対リストを基に、各部品をノードとして近接関係にある部品間にアークを張った部品間接触関係グラフを作成する。
【００４５】
ここで、上述したステップS111における、AABB Treeを利用して部品の包含矩形間の距離が許容誤差以内である部品対リストを作成する処理について、より詳細に説明する。まず初期処理として、AABB Treeのトップノード間の対をキューにいれる。次に、以下の処理をキューが空になるまで続ける。
【００４６】
まず、キューからノード対を取り出し、ノードの矩形間の距離を測る。この距離が指定許容誤差以内に入っていなければ何もしないが、指定許容誤差以内に入っていたならば以下の処理を行う。すなわち、両方のノードが葉ノードで違うノードである場合は、その包含矩形が含む構成部品対を部品対リストに入れる。また、両方のノードが葉ノードで同じノードである場合は何もしない。また、一方のノードが葉ノードで他方のノードが葉ノードである場合は、その葉ノードと他方の非葉ノードの子ノードとの部品対を作ってキューに入れる。また、両方のノードとも葉ノードでない場合は、どちらか一方のノードの子ノードと他方のノード間のノード対を作ってキューに入れる。なお本処理では、対応する直方体の体積の大きい方のノードの子ノードと体積の小さい直方体を持つノードとの部品対を作成している。以上の処理をキューが空になるまで続けることによって、もれなく包含矩形間の距離が許容誤差以内である部品対リストを作成することができる。
【００４７】
次に、上述したステップS111で求められた近接する各部品対に対して、包含矩形の距離が指定許容誤差以内である構成面対を順次出力するステップS112の処理について、より詳細に説明する。まず初期処理として、各部品に対する包含矩形木のトップノードの対をスタックに入れる。次に出力を求められる限り、包含矩形の距離が指定許容誤差以内にある構成面対を出力するまで、以下の処理を繰り返す。但し、スタックが空になった場合は出力情報を無しとする。
【００４８】
まずスタックからノード対を取り出し、ノードの矩形間の距離を測る。この距離が指定許容誤差以内に入っていなければ何もしないが、指定許容誤差以内に入っていたならば以下の処理を行う。すなわち、両方のノードが葉ノードなら、その葉ノードが包含する構成面対を出力して終了する。また、片方のノードが葉ノードで別のノードが非葉ノードの場合は、片方の葉ノードと非葉ノードの子ノードとのノード対を作ってスタックに積む。また、両方のノードとも非葉ノードの場合は、片方のノードと別のノードの子ノードとのノード対を作ってスタックに積む。本実施形態においては、矩形の体積の大きい方の子ノードと小さい方のノードとのノード対を作るものとする。以上の処理により、包含矩形の距離が指定許容誤差以内である構成面対を順次出力することができる。
【００４９】
以下、ステップS11で求められた許容誤差以内で近接する各部品対に対して、許容誤差以内で近接するパッチ対を算出するステップS12の処理について、より詳細に説明する。この処理は基本的に、上記ステップS112の処理においてスタックを使用した部分をキューに置き換えたものである。まず初期処理として、各部品に対する包含矩形木のトップノードの対をキューに入れる。次にキューが空になるまで以下の処理を行う。
【００５０】
まずキューからノード対を取り出し、ノードの矩形間の距離を測る。この距離が指定許容誤差以内に入っていなければ何もしないが、指定許容誤差以内に入っていたならば以下の処理を行う。すなわち、両方のノードが葉ノードなら、その葉ノードが包含する構成面対間の距離を算出して、その距離が指定許容誤差以内に入っていたらこの構成面対を出力構成面対リストに登録する。また、片方のノードが葉ノードで、別のノードが非葉ノードの場合は、片方の葉ノードと非葉ノードの子ノードとのノード対を作ってキューに入れる。また、両方のノードとも非葉ノードの場合は、片方のノードと別のノードの子ノードとのノード対を作ってキューにいれる。本実施形態においては、矩形の体積の大きい方の子ノードと小さい方のノードとのノード対を作るものとする。以上の処理により、指定許容誤差以内にある構成面対をもれなく得ることができる。
【００５１】
ここで、上述したステップS112の処理ではスタックを用い、ステップS12の処理ではキューを用いるのは、以下のように説明できる。ステップS112の処理では部品間の接触関係を求めたいため、ただ一つの構成面間でも近接関係にあることを判定できれば良いので縦型探索になる。それに対しステップS12の処理では、近接している構成面間の対をすべて探索する必要があるため横型探索となる。データ構造的に縦型探索にはスタックが、横型探索にはキューが対応しているため、ステップS112の接触判定処理にはスタックを用い、ステップS12の近接構成面対リストを求める処理にはキューを用いることになる。
【００５２】
●ステップS2(構成面ごとの近接部分領域算出処理)
次に、ステップS1で求めた各稜線に対する近接構成面に対して、各構成面がその稜線のどの部分領域に対して指定許容誤差以内にあるかを算出する、ステップS2の処理について詳細に説明する。この処理は、各構成面に対して、近接点を持ち得る空間領域を表現する立体を作成することにより行われる。具体的には、各構成面から指定許容誤差εの距離にある空間を表現するε近傍立体を作成し、その近傍立体に含まれる稜線の範囲を求めることによって、上記の部分領域を求めることができる。
【００５３】
本実施形態では構成面はすべて三角形パッチであると仮定しているので、ε近傍立体は図6に示すように、三角形パッチの各頂点を中心として半径がεの球、三角形パッチの各稜線を軸として半径がεの円柱、三角形パッチを法線方向の上下にεオフセットさせた面を上底面として持つ三角柱の和形状、として表現される。本実施形態では実際にこの和形状を求めるのではなく、これらの球、円柱、三角柱の和形状であるという情報を保持する。なぜならこれらの和形状を求める処理は困難であり、安定的かつ効率良い処理はできないからである。
【００５４】
ここで、稜線上の任意の点は一次元のパラメータを使って表現できるので、稜線の任意の範囲はこのパラメータを使って表現できる。具体的には、稜線が線分である場合には始点をPs、終点をPeとすると、稜線上の任意の点は、
P(t) = Ps + t・(Pe - Ps)  (0 ≦ t ≦ 1)    ・・・・(1)
と表現できる。従って、稜線上の範囲は[ts,te]のようにパラメータの範囲として表現できる。よって各稜線に対して各近接構成面に対して近接点を持ち得る部分領域のリストは、
CPEi = {[ts1,te1],[ts2,te2],......,[tsn,ten]}
のような形で表現される。この範囲のリスト上における順番は、対応する近接構成面の近接構成面リストの順番に対応している。つまり、リストのi番目の近接構成面に対して近接点を持ち得る着目稜線の部分領域は[tsi,tei]である。
【００５５】
本実施形態のように稜線が線分、構成面がすべて三角形パッチよりなる場合は、簡単な交点計算とパラメータ範囲の積をとることにより、容易に近傍立体よりなる稜線の範囲を求めることができる。具体的には本実施形態では、上記の三角形パッチの構成面のε近傍立体を構成する、頂点を中心とする球、稜線を軸とする円柱、パッチの上下オフセット面を上底面とする三角柱との積形状である線分を求め、その線分の和形状となる線分を算出することにより、上記の稜線上の範囲を求めることができる。ここで各構成立体と線分との積形状は、線分と、球、円筒面、平面との交点計算および立体と線分の端点との内外判定を行うことにより、簡単に行うことができる。
【００５６】
ここで図7の(a)〜(e)に、切り出された対応領域の例を示す。図示される網点領域がある構成面に対応するε近傍立体、太線が対応稜線である。各図において、星印のところで稜線と立体が交点を持つものとし、破線で表現される稜線部分が立体と稜線の積領域、すなわち稜線の立体に含まれる部分である。前述したようにこの積領域は、稜線と立体を構成する球、円柱、三角柱それぞれとの積領域の和形状として算出される。
【００５７】
図7(a)の場合、稜線と立体が2点で交わり、その各交点の稜線上におけるパラメータをそれぞれts,teとすると、近接領域は[ts,te]と表現できる。図7(b)の場合、稜線と立体が1点で交わり、稜線の始点が立体の中にある。ここで交点の稜線上におけるパラメータをteとすると、近接領域は[0,te]で表現できる。図7(c)の場合、稜線と立体が1点で交わり、稜線の終点が立体の中にある。ここで交点の稜線上におけるパラメータをtsとすると、近接領域は近接領域は[ts,1]で表現できる。図7(d)の場合、稜線と立体は交点を持たず、稜線の2端点が立体の内部にある。このとき、近接領域は稜線全部、すなわち[0,1]になる。図7(e)の場合、稜線と立体は交点を持たず、稜線の2端点が立体の外部にある。このとき近接領域は空となり、[]と表現する。
【００５８】
●ステップS3〜S6（近接部分領域の絞込み処理）
次に、ステップS3からステップS6では、ステップS2で求まった各近接構成面に対する近接部分領域を初期値として、以下に説明する局所ボロノイマップを利用することによって、近接点を持ち得る可能性のある領域をさらに絞り込んでいく。
【００５９】
ステップS3では局所ボロノイマップを作る準備として、各稜線に対する近接構成面間における隣接関係を認識して、隣接する構成面のペア情報を作成する。例えば構成面P1,P2,P3,P4のうち、P1とP3，P2とP4が隣接することが分かったら、(P1,P3)、(P2,P4)というペア情報を隣接する構成面情報として作成しておく。この処理は、構成面の隣接情報を利用して容易に行うことができる。
【００６０】
次にステップS4では、ステップS3で作成した隣接構成面対ごとに局所的にボロノイマップを作成する。ここでボロノイマップとは、複数の形状要素（サイトという）が空間上にあったとき、空間をどの形状要素に距離的に近いかで分割した領域情報である。
【００６１】
ここで、二次元空間の点に対するボロノイマップの例を図8に示す。同図において、各点がサイトを示し、各点を囲む多角形が空間上でその点からの距離が最も近くなる領域を示しており、境界上は半無限領域となる。例えば、この点が郵便局の位置であるとして、ある住所の担当郵便局は二次元空間的に一番近い郵便局であると規定すると、この図は各郵便局の担当領域を表現することになる。
【００６２】
この場合、各領域の辺は隣接する二点間の垂直2等分線の一部となる。原理的にはこのボロノイマップはすべての二点間の垂直2等分線を求めて、その積形状を作っていくとによって作成される。ある点の近接領域は、他のすべての点との垂直2等分線によって分割される二つの半無限領域のうち、近い方の領域の積領域となっている。ここで局所的という意味は、複数のサイトの中で特定の二つのサイトに着目したボロノイマップという意味である。例えば、図8のような2次元の点をサイトとするボロノイマップでは、全体のサイトに対するボロノイマップは図8のようになるが、特定の二点に着目したボロノイ領域は図9のように、着目する二点の垂直2等分線による空間の分割になる。これを局所ボロノイマップと呼ぶ。
【００６３】
図8のような二次元の点のボロノイマップを作ることは比較的簡単であるが、本発明が解決しようとする問題の対象である三次元の構成面のような、一般のサイトに対するボロノイマップを作ることは容易ではない。従って本実施形態では、簡単に作れる隣接する構成面間の局所ボロノイマップを繰り返し作成、利用することにより、近接領域を絞り込んでいくという手法をとっている。
【００６４】
次に、本実施形態が対象とする、構成面が平面の場合の隣接する二構成面の局所ボロノイマップ作成法について記す。この局所ボロノイマップの領域分割は、以下のような分割平面によりなされる。二構成面の共有稜線の方向ベクトルをV、稜線の始点から終点に向かう進行方向に向かって左側の構成面の単位法線ベクトルをNl、右側の構成面の単位法線ベクトルをNrとする。このとき分割平面は、図10のように共有稜線の始点Pを通り、法線ベクトルNが
N = ((Nl＋Nr)×V) / ｜(Nl＋Nr)×V｜
の平面となる。ここで、空間上の任意の点Xを引数とした関数Fを
F(X)＝(X-P)・N
と定義すると、F(X)＞0を満たす領域（表側と呼ぶ）の点は左側の構成面に近く、F(X)＜0を満たす領域（裏側と呼ぶ）の点は右側の構成面の方に近く、さらにF(X)＝0を満たす領域の点、すなわち分割平面上の点は、両方の構成面と等距離にあるということがいえる。ここでは便宜的に、分割平面上の点は左側の構成面に近いとみなす。よって、たとえば着目稜線のうちF(X)≧0に属している領域は右側の構成面に対して近接点を持つ可能性はなく、F(X)＜0に属している領域は左側の構成面に対して近接点を持つ可能性はない。
【００６５】
ステップS5では、ステップS4で求めた局所ボロノイマップを利用して、近接する各構成面が稜線のどの範囲に対して近接点を持てないか、逆にいえばどの範囲で近接点を持つ可能性があるかを算出する。上述したように近接構成面の大域的なボロノイマップを作成すれば、一度に各構成面が近接点を持つ範囲を求めることができるが、一般にサイトが点以外のときにこれらのボロノイマップを高速にしかも安定的に作ることは難しい。よって、本処理では隣接している構成面対ごとの局所ボロノイマップによる近接領域のクリッピングを繰り返し行うことにより、近接領域を絞り込んでいく。
【００６６】
この処理は、ステップS4で求めた分割平面と着目している稜線との包含関係により求められる。具体的には、分割平面と稜線の交点計算および、稜線の端点が分割平面のどちら側にあるかによって求めることができる。クリッピングされた結果は図11のようになる。同図において、星印は分割平面と稜線との交点を示す。
【００６７】
図11(a)のように稜線がすべてF(X)≧0の領域に属している場合、すなわち稜線の始終点ともに分割平面の表側もしくは分割平面上にある場合、左側の構成面に対しては稜線の全域で近接点を持つ可能性があり、右側の構成面に対しては近接点を持つ可能性はない。したがって、左側および右側のそれぞれの構成面の局所ボロノイマップによる近接面を持つ可能性のある範囲をそれぞれIl、Irとすると、Il＝[0,1]、Ir＝[]である。また、図11(b)のように稜線がすべてF(X)＜0の領域にある場合、すなわち稜線の始終点ともに分割平面の裏側にある場合、Il＝[]、Ir＝[0,1]である。また、図11(c)のように稜線が分割平面と交差する場合、交点の稜線上におけるパラメータをtiとすると、稜線の始点側がF(x)≧0の領域にあるときはIl=[0,ti]、Ir=[ti,1]であり、稜線の始点側がF(x)＜0の領域にあるときはIl=[ti,1]、Ir=[0,ti]となる。
【００６８】
ステップS6では、上記ステップS2で求めた各稜線の各近接構成面に対する近接領域を初期領域として、ステップS5において求まった、各近接構成面が近接点を持つ稜線の領域との積を取ることにより、各構成面が近接点を持つことができる稜線の領域を絞り込んで更新する。この処理は、各隣接構成面対に対して求まった、各構成面が近接点を持ちうる可能性のある稜線上の領域に対して繰り返し行われる。つまり、ステップS2で求めたある構成面に対応する近接点を持つ可能性のある稜線上の領域をIs、その構成面に対するI番目のステップS5の処理で求まった近接点を持つ可能性のある稜線上の領域をIi(i=1,2,...,N)とすると、
I＝Is∩I1∩I2∩...∩Ii∩...∩IN
を求める。各近接構成面は、ここで求まった着目稜線の部分領域に対して近接点を持つ可能性がある。
【００６９】
以上、本実施形態における前処理として、各稜線に対する近接構成面の取得(ステップS1)、各近接構成面のε近傍立体により各構成面が近接点をもちうる稜線上の領域を切り出すε近傍クリッピング(ステップS2)、隣接する近接構成面間の局所的なボロノイマップを利用して、さらに各構成面が近接点を持ち得る領域を絞り込む局所ボロノイクリッピングの処理を繰り返し行い、各稜線の部分領域ごとに近接点を持ち得る構成面を絞り込む処理(ステップS3〜S6)について説明した。
【００７０】
この前処理により、指定空間を隣接する二構成面のうちどちらに近いかで部分領域に分割することができ、各構成面に対しその指定空間のどの部分領域に対しては近接点を持ち得ないか、逆にいうとどの部分領域に対して近接点を持つ可能性があるかを算出することができる。またこの処理を隣接するすべての構成面対に対して適用して、それぞれの処理で算出された近接点を持つ可能性のある部分領域の積を取ることにより、各構成面に対して近接点を持つ可能性のあるより絞り込まれた部分領域を得ることができる。従って、指定空間上の任意の点に対してより絞り込まれた近接点を持つ可能性のある構成面のリストを得ることができる。
【００７１】
理論的には、すべての近接構成面に対するボロノイマップを作成して一度に各構成面に対して近接点を持ち得る指定空間上の部分領域を得る方法も考えられるが、一般に点以外の任意の形状に対するボロノイマップを安定的に効率的に求めることは難しい。これに対し本実施形態では、二構成面間のボロノイマップしか作成しないため、簡単に安定的な処理を行うことが可能である。
【００７２】
●ステップS7〜S10(近接点算出処理)
次に、上述した図1Aに示す前処理によって作成された情報に基づいて近接点を求める処理について、図1Bのフローチャートにしたがって説明する。この処理は、単純に近接点を求める手法と基本的に同様である。
【００７３】
まずステップS7において、与えられた稜線上の点に対して、稜線上のパラメータを求める。本実施形態では稜線は線分であるので、与えられた点をPiとすると、上記式(1)よりパラメータtは、
t = ｜Pi−Ps｜／｜Pe−Ps|        ・・・・(2)
により求まる。
【００７４】
次にステップS8では、図1Aの前処理で作成された情報を基に、ステップS7で求められた、与えられた点のパラメータ値に対して、その値に対して近接点を持つ可能性のある近接構成面を探索してリストを作成する。具体的には、上述した前処理において、各近接構成面に対して近接点を持つ可能性のある稜線上の領域Iが求められているので、t∈Iである時にその近接構成面をリストに加える。
【００７５】
次にステップS9では、ステップS8で求まった近接構成面のリストにある各構成面に対して、最短距離および与えられた点からの近接点を求める。
【００７６】
そしてステップS10において、ステップS9で求めた近接点のうち最短の距離を持つものを、近接点として抽出する。
【００７７】
以上発明したように本実施形態の近接点算出方法によれば、各組立品形状に対して上記図1Aに示した前処理を行うことにより、稜線上の各点に対して、近接点を持ち得る可能性のある構成面を大幅に絞り込むことができるため、近接点の算出に要する時間を大幅に短縮することができ、処理の高速化が実現する。上記前処理は与えられた入力形状に対してただ一度だけ行えばよいので、特に近接点を求める処理回数が多いほど、処理を効率化することができる。
【００７８】
また、組立品に対する各部品の包含矩形木、各部品に対する各構成面の包含矩形木を作成して利用することにより、各稜線に対して近接する構成面を高速に求めることができる。
【００７９】
なお、本発明は、上記した実施形態に限定されるものではなく、本発明の主旨の範囲において適宜変形、組み合わせが可能であることは言うまでもない。
【００８０】
＜他の実施形態＞
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体（記録媒体）等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【００８１】
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム（実施形態では図に示すフローチャートに対応したプログラム）を、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
【００８２】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【００８３】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
【００８４】
プログラムを供給するための記録媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD-ROM、CD-R、CD-RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD-ROM，DVD-R)などがある。
【００８５】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
【００８６】
また、本発明のプログラムを暗号化してCD-ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【００８７】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【００８８】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【００８９】
【図１Ａ】本発明に係る一実施形態における前処理を示すフローチャートである。
【図１Ｂ】本実施形態における近接点算出処理を示すフローチャートである。
【図２】本実施形態を実行する装置の概要構成を示すブロック図である。
【図３】近接構成面のリスト算出処理を示すフローチャートである。
【図４】二次元の包含矩形木であるOBB Treeを説明する図である。
【図５】近接部品対の認識処理を示すフローチャートである。
【図６】ε近傍立体を説明する図である。
【図７】ε近傍立体による稜線上の近接領域に対するクリッピング処理を示す図である。
【図８】二次元の点に対するボロノイマップを説明する図である。
【図９】二次元の2点に対する局所ボロノイマップを説明する図である。
【図１０】隣接する2平面間の局所ボロノイマップを作成するための分割平面算出処理を説明する図である。
【図１１】本実施形態における稜線上の近接領域クリッピング処理を説明する図である。
【図１Ａ】
2006277349.tif 000003
【図１Ｂ】
2006277349.tif 000004
【図２】
2006277349.tif 000005
【図３】
2006277349.tif 000006
【図４】
2006277349.tif 000007
【図５】
2006277349.tif 000008
【図６】
2006277349.tif 000009
【図７】
2006277349.tif 000010
【図８】
2006277349.tif 000011
【図９】
2006277349.tif 000012
【図１０】
2006277349.tif 000013
【図１１】
2006277349.tif 000014