以下、本発明の一実施の形態による幾何図形データ処理装置について図面を参照しながら説明する。図1は、本発明の一実施の形態による幾何図形データ処理装置の構成を示すブロック図である。
図1に示す幾何図形データ処理装置は、外部インターフェース部1、誤差幾何データ記憶部2、誤差幾何処理部3、無誤差幾何データ記憶部4、無誤差幾何処理部5、精度管理部6及び幾何無矛盾化処理部7を備え、無誤差幾何処理(可変長整数演算)と誤差幾何処理(浮動小数点演算)とをハイブリッド化した無誤差/誤差ハイブリッド幾何モデリングシステムである。
本幾何図形データ処理装置は、CPU(中央演算処理装置)、ROM(リードオンリメモリ)、RAM(ランダムアクセスメモリ)、外部記憶装置、記録媒体駆動装置、入力装置、表示装置、外部機器インターフェース等を備えるコンピュータから構成することができる。この場合、後述する幾何図形データ処理を実行するための幾何図形データ処理プログラムを、CPU等を用いて実行することにより、外部インターフェース部1、誤差幾何データ記憶部2、誤差幾何処理部3、無誤差幾何データ記憶部4、無誤差幾何処理部5、精度管理部6及び幾何無矛盾化処理部7としてコンピュータを機能させることができる。なお、幾何図形データ処理装置の構成は、この例に特に限定されず、上記の各機能の一部又は全部を専用のハードウエアから構成する等の種々の変更が可能である。
ここで、誤差幾何処理及び無誤差幾何処理について詳細に説明する。現在、普及しているほとんどすべての計算機には、浮動小数点演算プロセッサが当然のように装備されている。ユーザは、大抵の場合、この浮動小数点演算プロセッサをほとんど意識することなく用いて、数値計算を日常的に行っている。このため、浮動小数点演算により発生する計算誤差に関しても、あまり注意を払わなくなってきており、計算誤差があることすら意識していない場合も多い。
また、浮動小数点演算では、整数演算に比べて、はるかに広い範囲の数値が扱うことができ、実数を含む数値計算に非常に適しているが、演算による誤差の発生とその蓄積が起こり、誤差管理を行うことは困難である。すなわち、浮動小数点演算における本質的な問題は、真の誤差管理ができていないこと、また出来ないことにある。このため、システム(処理系)が暴走及び破綻し、処理の完全な安定性を実現することが難しく、高信頼性を有するシステムを作成することが困難な場合が多い。
例えば、浮動小数点演算等の誤差を伴う演算をベースにした誤差幾何処理の代表例として、ユークリッド座標系幾何処理がある。3次元幾何処理は、通常、3次元のユークリッド座標系(X,Y,Z)を用いて行われる。ユークリッド座標系を用いた幾何図形処理は、いろいろな幾何図形処理に幅広く適用することができ、処理が高速で実用性が非常に高い。
しかしながら、ユークリッド座標系の幾何演算では、通常、割り算が発生する。浮動小数点演算を用いた割り算は、その演算誤差のために、計算精度が低下する等の種々の悪影響を及ぼし、システムの信頼性を著しく低下させる。すなわち、本来の幾何学には、誤差という概念そのものがなく、誤差を伴う幾何図形処理(誤差幾何処理)では、処理の完全な安定性(100%の安定性)は保証されない。
一方、無誤差演算(可変長整数演算)等をベースにした無誤差幾何処理の最大の特徴は、演算誤差の発生がまったくないので、完全に安定的な(100%の安定性)幾何処理系を作成することができる点である。また、数学的又は幾何学的に作成されたアルゴリズムは、正確な演算を前提にしているので、そのままプログラムとして実装することができ、プログラムの複雑化を招かない等の特徴を持つ。さらに、無誤差幾何処理では、当然、誤差の管理が必要なく、処理系を安定化させる作業はまったく不要となる。
しかしながら、無誤差幾何処理は、無誤差でできる演算の範囲が非常に限定的であること、及び、処理を進めると数値桁数が際限なく増大すること等の本質的な問題点をかかえている。例えば、複数回の集合演算を繰り返すと、幾何図形データを構成する頂点データの数値桁数が際限なく増大していく。
また、4次元同次座標系幾何処理(以下、「同次座標幾何処理」という)は、3次元の幾何図形処理を、1次元次数を上げた4次元同次座標系(X,Y,Z,w)において行うものである。この4次元同次座標(以下、「同次座標」という)は、割り算前のデータであり、同次座標幾何処理では、割算を回避でき、全ての演算は加減算と乗算とのみで済む。したがって、同次座標幾何処理では、無限桁数の循環小数等が発生することはなく、上記の無誤差演算と相性がよい体系である。したがって、同次座標幾何処理は、無誤差演算と組み合わせることにより、数値的に決して破綻することのない無誤差幾何処理を実現することが可能となる。
上記の知見を基に、本実施の形態では、無誤差幾何処理において、同次座標系の1つであるプリュッカー座標系を用いて、可変長ビットの整数演算により無誤差幾何演算を行っている。以下、この4次元プリュッカー座標系幾何演算(同次座標幾何演算)に関して説明する。
(1)2点から線の生成
2点V0=(X0,Y0,Z0,w0)及びV1=(X1,Y1,Z1,w1)を通る直線のプリュッカー座標L01は、次式で与えられる。なお、V0,V1,L01は、プリュッカー座標(ベクトル列)を表している。
L01=〔P01,Q01,R01,S01,T01,U01〕 (1)
ここで、P01等は、下式で与えられる。
(2)3点から面の生成(平面係数の算出)
3点V0=(X0,Y0,Z0,w0)、V1=(X1,Y1,Z1,w1)及びV2=(X2,Y2,Z2,w2)を通る面のプリュッカー座標F012は、次式で与えられる。なお、V0,V1,V2,F012は、プリュッカー座標(ベクトル列)を表している。
F012=〔A012,B012,C012,D012〕 (3)
ここで、A012等は、下式で与えられる。
(3)線と面の交点計算
2点Va=(Xa,Ya,Za,wa)及びVb=(Xb,Yb,Zb,wb)を通る直線と、面F012との交点Vは、次式で与えられる。なお、Va,Vb,F012,Vは、プリュッカー座標(ベクトル列)を表している。
V=Sb012Va−Sa012Vb (5)
ここで、
Sa012=VaF012=XaA012+YaB012+ZaC012+waD012 (≦0) (6a)
Sb012=VbF012=XbA012+YbB012+ZbC012+waD012 (≧0) (6b)
(4)2点の一致判定
2点V0=(X0,Y0,Z0,w0)とV1=(X1,Y1,Z1,w1)との一致判定は、この2点を通る直線L01において以下の式が成立することである。
L01=〔P01,Q01,R01,S01,T01,U01〕=〔0,0,0,0,0,0〕 (7)
(5)2面の一致判定
2つの平面f0=〔a0,b0,c0,d0〕Tとf1=〔a1,b1,c1,d1〕Tとの一致判定は、点と面の双対性により、上記式(7)と同じ形式となる。
(6)点の面に対する位置判定
点V=(X,Y,Z,w)が、平面F012に対してどの位置にあるかの判定は、次式で与えられる。なお、式(8)において、sの符号+、0、−に対応して、点は、面の正側、面上、面の負側となる。
s=VF012=XA012+YB012+ZC012+wD012 (8)
(7)2線分の向き判定
2線分L01とL23とが同一直線であるときには、両者の向きの判定は、次式で与えられる。なお、式(9)において、両者の向きは、sが正のときは同じ方向、負のときは逆向きとなる。
s=L01L23 (9)
(8)2面の向き判定
2面F012とF345とが同一平面であるときには、両者の向きの判定は、次式で与えられる。なお、式(10)において、両者の向きは、sが正のときは同じ方向、負のときは逆向きとなる。
s=F012F345 (10)
また、本実施の形態では、上記の無誤差幾何処理と誤差幾何処理とは、排他関係ではなく、補完関係にあると考え、無誤差幾何処理と誤差幾何処理とをハイブリッド化して両者を統合することにより、完全な安定性(信頼性100%)を実現するとともに、無誤差幾何処理自体の実用性を向上する。すなわち、本実施の形態では、超3角形幾何処理が持つ単純性等の特性を最大限活用し、且つ同次幾何処理及び可変長整数演算をベースにして無誤差幾何処理を実現することにより、幾何無矛盾化処理部7及び無誤差幾何処理部5における処理の完全な安定性を実現する。
ここで、上記の超3角形幾何処理について説明する。図2は、ゼロ3角形及び超3角形幾何処理を説明するための模式図である。3次元幾何モデリング法の1つとして、BRep(Boundary Representation)が広く普及している。BRepでは、一般的に、図2の(a)に示すように、その境界面は任意の多角形面(以下、単に多角形と呼称する)を用いて表現されて処理される。ここでは、境界面が平面で構成される平面多面体BRepに限定する。
幾何図形処理が複雑化するのは、任意の多角形をベースとしていることに主因している。一方、3角形面(以下、単に3角形と呼称する)は究極的に単純な基本図形であり、幾何学的には「2次元単体」と呼ばれる。そこで、3角形のみを用いてBRepを構成すると、ある意味で究極的に単純な幾何表現及び処理が実現できる。図2の(b)に示す例は、(a)の多角形表現を通常の3角形表現とした図である。
しかしながら、3角形幾何処理は、集合演算などの処理の過程で、3角形の数(データ量)が急激に増えてしまう等の大きな欠点も併せ持つ。この欠点を解消するために、図2の(c)に示すように、通常の3角形幾何の概念を拡張し、3角形の3つの頂点が同一直線上となる退化した3角形幾何を考案した。図2の(c)では、頂点A,B,C及びDは、実際は同一直線上にあり、この退化した3角形をその面積がゼロになることから、「ゼロ3角形」と呼称し、また3つの頂点が同一直線上にない通常の3角形を「実3角形」と呼称する。そして、退化した3角形であるゼロ3角形を包含する3角形幾何処理を、拡張された処理形式ということで超3角形幾何表現処理形式(超3角形幾何処理)と呼称する。
図2の(b)と(c)に示す立体の前面を構成する実3角形の数を比較すると、(b)の従来法では、面を表現するのに13個が必要であるが、(c)の超3角形法では約半分の7個で済む。このように、ゼロ3角形を用いることにより、より少ない実3角形(通常3角形)で面分を表現することが可能となる。また、ゼロ3角形は、通常の3角形処理から除外できる場合が多い。このように、超3角形幾何処理では、ゼロ3角形を用いることにより、3角形幾何処理の単純性はほとんど損なうことなく、大きな欠点であった3角形の数の増大を抑制することができ、結果として、処理性を向上させることができる。
すなわち、ゼロ3角形は退化図形ではあるが、超3角形幾何処理では、このゼロ3角形の特性をむしろ逆手にとって、長所として積極的に活用しようとするものである。ゼロ3角形は、3角形が完全につぶれた「線形の3角形」であり、3角形と線分との両方の特性(2面性)を合わせ持つ。したがって、超3角形幾何処理では、ゼロ3角形を含む3角形幾何が持つ根元性と単純性とを最大限利用することにより、高効率且つ柔軟な幾何図形処理を実現することができる。
一方、超3角形幾何処理の短所は、ゼロ3角形という退化した、特別且つ特殊な3角形を注意深く取り扱う必要があることである。大抵の場合、実3角形処理(通常3角形処理)とゼロ3角形処理とは別処理となる。このため、処理系が、通常3角形処理に比べて少し複雑化する。また、どの処理を、ゼロ3角形を含む超3角形幾何処理とするかを、通常の3角形幾何処理との比較で検討する必要があるが、両者のバランスをうまく取らないと、処理が効率化されず、データ量も削減されない。
上記の超3角形幾何処理と、3次元ユークリッド座標系及び浮動小数点演算を組み合わせることにより、例えば集合演算の複雑性の問題を解決することができる。この超3角形幾何処理に関しては、特許第3018151号「3次元図形データの演算処理方法及びその装置」に詳述されているので、さらに詳細な説明は省略する。
しかしながら、上記の超3角形幾何処理では、処理の単純化及び高速化は実現されているが、処理の不安定性の問題は残ったままであり、処理系の100%の安定性は達成されていない。この超3角形幾何処理の不安定性を根本的に解決するアプローチとして、超3角形幾何処理、同次幾何処理及び無誤差演算(可変長整数演算)を統合化した同次超3角形幾何処理を考案した。この同次超3角形幾何処理では、集合演算の演算誤差による不安定性の問題を解消して100%の安定性を達成することができる。なお、この同次超3角形幾何処理に関しては、特許第3151710号「3次元図形の形状演算装置」及び特願2004−004690「3次元幾何データの無矛盾化方法及びそのシステム」に詳述されているので、さらに詳細な説明は省略する。
再び、図1を参照して、外部インターフェース部1は、計算機等の外部システム8から幾何図形データを読み込むとともに、幾何図形データが誤差幾何データの場合は、誤差幾何データ記憶部2に格納し、幾何図形データが無誤差幾何データの場合は、無誤差幾何データ記憶部4に格納する。また、外部インターフェース部1は、読み込んだ幾何図形データに対して誤差幾何処理又は無誤差幾何処理のいずれを実行すべきかを指示する演算指令を外部システム8から受け付け、誤差幾何データ記憶部2又は無誤差幾何データ記憶部4を介して誤差幾何処理部3又は無誤差幾何処理部5に通知する。さらに、外部インターフェース部1は、本幾何図形データ処理装置により処理された又は新たに生成された幾何図形データを誤差幾何データ記憶部2又は無誤差幾何データ記憶部4から読み出して外部システム8へ転送する。
誤差幾何データ記憶部2は、超3角形データ記憶部21及び頂点データ記憶部22を備え、超3角形データ記憶部21には、誤差幾何処理の対象となる立体データ、実3角形データ、ゼロ3角形データ及び交線データ等の誤差幾何データが記憶され、これらのデータを構成する頂点データがユークリッド座標系を用いて頂点データ記憶部22に記憶される。
無誤差幾何データ記憶部4は、同次超3角形データ記憶部41及び同次頂点データ記憶部42を備え、同次超3角形データ記憶部41には、無誤差幾何処理の対象となる立体データ、実3角形データ、ゼロ3角形データ及び交線データ等の無誤差幾何データが記憶され、これらのデータを構成する頂点データが同次座標系を用いて同次頂点データ記憶部42に記憶される。
ここで、本実施の形態に用いられるデータ形式について説明する。図3は、ユークリッド座標系及び同次座標系の座標データ及び数値データ並びに超3角形データのデータ構成の一例を示す図である。
まず、頂点データは、座標データ形式で格納され、誤差幾何処理の場合はユークリッド座標が用いられ、無誤差幾何処理の場合は同次座標が用いられる。具体的には、図3の(a)に示すように、ユークリッド座標データ(X,Y,Z)は、X座標値、Y座標値及びZ座標値から構成される。各座標値は、浮動小数点データとして表現され処理される。また、図3の(b)に示すように、浮動小数点データは、符号部、指数部及び仮数部から構成される。
一方、図3の(c)に示すように、同次座標データ(X,Y,Z,w)は、X座標値、Y座標値、Z座標値及びw座標値から構成される。各座標値は、可変長ビットの整数データとして表現され処理される。また、図3の(d)に示すように、可変長整数データは、語長部、符号部、そして数値部(整数表現)から構成される。
また、図3の(e)に示すように、超3角形データ(実3角形データ又はゼロ3角形データ)は、3角形の3つの頂点データ(座標データ)へのポインタ(v0,v1,v2)、3つの隣接する超3角形データ(実3角形データ又はゼロ3角形データ)へのポインタ(t0,t1,t2)、及び実3角形データ又はゼロ3角形データのどちらであるかを示すフラグfから構成される。ここで、ポインタとは、記憶装置(メモリ)上において、該当データが格納されている番地(アドレス)を示すデータである。なお、fは必ずしも必要ではなく、省略することができるが、本実施の形態では、処理の効率化のためにfを用いている。
図示を省略しているが、立体データは、実3角形データ及びゼロ3角形データの集合体であり、上記と同様に、これらのデータへのポインタから構成される。交線データは、交線の始点及び終点となる頂点データへのポインタ(v0,v1)と、交線を挟んで隣接する2つの3角形データへのポインタ(t0,t1)とから構成される。
誤差幾何処理部3は、超3角形幾何処理部31、ユークリッド座標処理部32及び浮動小数点演算処理部33を備え、超3角形幾何処理部31をベースにした3次元幾何モデリングシステム(ソリッドモデラ)であり、ユークリッド座標処理部32と浮動小数点演算処理部33とを用いて誤差幾何処理(誤差有り幾何処理)を実行する。
超3角形幾何処理部31は、誤差幾何データ記憶部2の頂点データ記憶部22に蓄積された頂点データ(浮動小数点データ)を順次読み出してユークリッド座標処理部32へ出力する。ユークリッド座標処理部32は、浮動小数点演算処理部33を用いて、ユークリッド座標系における座標の変換処理、例えば、頂点座標の移動、回転及びスケーリングの座標変換処理を浮動小数点演算により実行する。超3角形幾何処理部31は、ユークリッド座標処理部32による処理結果を再び頂点データ記憶部22に格納する。
例えば、座標回転変換処理の場合、ユークリッド座標系により表現された頂点データV=(X,Y,Z)を、その原点を中心にX座標軸回りにθ度回転した頂点データV’=(X’,Y’,Z’)は、以下の処理(3次元ユークリッド座標処理)により求めることができる。
ここで、
C=cos(θ),S=sin(θ) (12)
である。このように、座標回転変換処理では、3角関数(無理数)を伴うので、原理的に整数表現はできず、無誤差演算を適用することができないため、誤差演算(浮動小数点演算)が用いられる。すなわち、座標回転変換処理には誤差幾何処理が適している。
無誤差幾何処理部5は、同次超3角形幾何処理部51、4次元同次座標系幾何処理部52及び可変長ビット整数演算器53を備える。無誤差幾何処理部5は、同次超3角形幾何処理部51をベースにした3次元幾何モデリングシステムであり、4次元同次座標系幾何処理部52による4次元同次座標系幾何処理及び可変長ビット整数演算器53による可変長整数演算を用いて幾何処理を無誤差で実行する。この場合、幾何処理の不安定性の問題を根本から解決し、無誤差幾何処理部5において100%の安定性を確保することができる。
同次超3角形幾何処理部51は、2つの異なる立体(超3角形データ)に対して形状和、形状差及び形状積の集合演算等を無誤差で実行する。4次元同次座標系幾何処理部52は、4次元同次座標系での演算処理を行うプリュッカー座標演算器である。可変長ビット整数演算器53は、加算器、減算器及び乗算器としての機能を有し、加算、減算及び乗算を可変長ビットの整数演算を用いて無誤差で行う。
例えば、同次超3角形幾何処理部51は、無誤差幾何データ記憶部4の同次超3角形データ記憶部41に蓄積された同次超3角形データ、及び同次頂点データ記憶部42に蓄積された同次頂点データ(可変長整数データ)を読み出し、これらのデータに対して4次元同次座標系幾何処理部52及び可変長ビット整数演算器53を用いて集合演算処理を行い、その結果を再び無誤差幾何データ記憶部4に格納させる。上記の平面多面体の集合演算処理は、有理数のみで行うことができ、無理数が介在しないため、可変長整数演算ですべてを行うことができ、無誤差幾何処理で行うことができる。なお、この無誤差集合演算処理としては、特許第3151710号「3次元図形の形状演算装置」に記載されている無誤差演算処理を用いることができるので、詳細な説明を省略する。
精度管理部6は、数値データ切り捨て処理部61及びデータ変換処理部62を備え、数値の精度の管理、すなわち、頂点データ(頂点座標値データ)の数値桁数の管理を行うとともに、頂点データの数値のデータ形式を誤差有り形式(浮動小数点フォーマット)と無誤差形式(可変長整数フォーマット)との間で双方向に変換する。
数値データ切り捨て処理部61は、浮動小数点で表現された頂点データ及び可変長整数で表現された頂点データに対して、要求桁数(要求精度)に応じて、その数値桁数を切り捨てる処理を行う。例えば、1回の無誤差集合演算が行われる度に、頂点座標値データの桁数が(通常)増大するため、数値データ切り捨て処理部61は、集合演算の度に、予め設定された要求桁数に応じて頂点データ(可変長整数)の下位桁の切り捨てを行う。なお、要求桁数は、上記のように予め設定されたものに特に限定されず、外部システム8からの要求に応じて桁数を設定したり、計算過程において適応的に設定する等の種々の変更が可能である。
ここで、数値の精度の管理について説明する。上記の無誤差幾何処理の欠点の1つは、計算が進むにつれて数値桁数が際限なく増大することである。例えば、複数回の集合演算を無誤差幾何処理で繰り返すと、頂点データの数値桁数が際限なく増大し、この数値桁数の増大は無誤差幾何処理の原理的なものであり、不可避である。しかしながら、幾何処理の実用面を考えると、ある精度以上の計算は必要でない場合がほとんどである。
したがって、本実施の形態では、上記の数値桁数の増大を回避するため、数値データ切り捨て処理部61を用いて、要求精度に応じて頂点データの数値桁数を切り捨てることにより、無誤差演算処理に桁数制限を導入して精度(誤差)を管理している。
ここで、「誤差演算処理による誤差」と「無誤差演算処理による誤差」とは、まったく別物であることを強調しておく。前者では、絶えず誤差が発生し蓄積されていく。そして、このような状況下、誤差を把握して管理をすることが難しく、誤差管理をすることは不可能であるといっても過言ではない。このように、誤差演算処理による誤差は制御不能であり、「受動的な」誤差である。一方、後者では、誤差が発生する時点は限定的及び選択的であり、頂点の座標値の切り捨て処理時にのみ誤差が発生する。すなわち、誤差が絶えず発生することはなく、また蓄積されていくこともない。この誤差は制御可能であり、「能動的な」誤差である。無誤差幾何処理においても、実用面を考えると、ある精度以上の計算は必要でない場合がほとんどである。
データ変換処理部62は、ユークリッド座標データ(浮動小数点フォーマット)から同次座標データ(可変長整数フォーマット)への変換処理、及びその逆の同次座標データからユークリッド座標データへ変換処理を実行する。
ユークリッド座標データVe=(Xe,Ye,Ze)から同次座標データVh=(Xh,Yh,Zh,wh)への変換処理は、以下の式を用いて行われる。
(Xh,Yh,Zh,wh)=(Xe,Ye,Ze,1) (13)
さらに、各座標値に対して、浮動小数点データから整数データへのフォーマット変換処理が行われる。
一方、同次座標データVh=(Xh,Yh,Zh,wh)からユークリッド座標データVe=(Xe,Ye,Ze)への変換処理は、以下の式を用いて行われる。
(Xe,Ye,Ze)=(Xh/wh,Yh/wh,Zh/wh) (14)
さらに、各座標値に対して、整数(分数)データから浮動小数点データへの各座標値のフォーマット変換処理が行われる。
幾何無矛盾化処理部7は、退化3角形処理部71、重なり3角形処理部72及び反転境界面処理部73を備え、数値桁数の切り捨てに伴う頂点データの変動により発生する幾何矛盾をなくす幾何無矛盾化処理を実行する。この幾何無矛盾化処理では、矛盾図形である種々の退化図形を扱うために、多角形をベースとした処理では幾何的組み合わせの数が非常に多くなり(幾何組み合わせの爆発)、処理不可能である。
このため、本実施の形態では、超3角形幾何処理が持つ究極的な単純性等を最大限利用することにより、幾何無矛盾化処理を構築している。すなわち、退化3角形処理部71、重なり3角形処理部72及び反転境界面処理部73による幾何無矛盾化処理は、無誤差幾何処理部5の機能を用いて構築している。
また、幾何無矛盾化処理も無誤差で行われ、100%の安定性を実現することができるが、幾何無矛盾化処理においても数値桁数が増大する(場合がある)ので、数値データ切り捨て処理部61により、頂点データの数値の切り捨てが行われ、この切り捨てによる幾何矛盾を除去するため、頂点データの数値の切り捨て後に、幾何無矛盾化処理を再度実行する。これらの処理は、幾何矛盾がなくなるまで、すなわち数値桁数の増大がなくなるまで繰り返される。さらに、誤差幾何処理部3及びデータ変換処理部62においても、その誤差等により幾何矛盾が発生する(場合がある)ので、これらの処理の後に、幾何無矛盾化処理を実行する。
ここで、頂点データの変動により発生する幾何矛盾について詳細に説明する。本実施の形態では、立体の境界面(超3角形BRep)は、一又は複数の3角形(実3角形及びゼロ3角形)のみで構成され、上記の数値の切り捨て、浮動小数点演算誤差、及びデータ変換(浮動小数点/整数変換)により、頂点データの数値が変動し、頂点の位置が動く。この頂点の移動により、3角形自体の形の変化及び3角形相互の相対位置の変化が発生し、これらの変化により、以下に説明する幾何矛盾が発生する。
図4は、退化3角形及びその除去処理を説明するための模式図である。まず、3角形自体の形の変化に関しては、図4に示すように、以下の3つのいびつな3角形が発生する可能性がある。このようないびつな3角形を「退化3角形」又は「ゼロ3角形」と呼ぶ。
(1)2頂点が同一点となる3角形
(2)3頂点が同一点となる3角形
(3)3頂点が同一直線上となる3角形
このため、退化3角形処理部71は、退化3角形面を検出して除去する退化3角形検出除去処理を実行する。具体的には、退化3角形処理部71は、上記の2頂点が同一となるいびつな3角形、3頂点が同一点となるいびつな3角形、及び3頂点が同一直線上となるいびつな3角形を検出して除去する。なお、超3角形幾何処理では、上記の退化3角形を特段消去する必要も、例外処理する必要もないが、退化3角形を消去すると、データ量(ゼロ3角形数)を削減することができるとともに、不必要なゼロ3角形処理を回避して処理を効率化することができるので、本実施の形態では、退化3角形処理部71により、以下のようにして退化3角形を検出して除去している。
まず、3角形データ(実3角形データ及びゼロ3角形データ)を無誤差幾何データ記憶部4から順次取り出し、その頂点データv0,v1,v2を順次読み込む。次に、その3つの頂点データv0,v1,v2に関して同一点判定処理を行う。v0=v1となる場合は、辺v0v1を挟んで隣接する2つの3角形データ(図4の(4)の例ではt0とt1)を消去する。これに伴い、図4の(4)に示すように、消去される3角形t0,t1を取り囲む4つの周辺3角形t2,t3,t4,t5の隣接接続情報を変更する。図4の(4)では、t0とt1の消去に伴い、t2とt3、及びt4とt5が隣接するようになる。また、v1を頂点に持つすべての3角形データの頂点v1をv0とする。図4の(4)では、v1を頂点に持つ3角形面t3,t5,t6の頂点v1をv0に変更する。そして、頂点データv1を消去する。v0=v2、v1=v2となる場合も、上記と同様の処理を行う。以上の処理が、(1)2頂点が同一点となる場合、及び(2)3頂点が同一点となる場合の退化3角形検出除去処理である。
次に、(3)同一頂点を持たない3角形データに対して、その3つの頂点データv0,v1,v2の同一直線判定処理を行う。これらの3つの頂点が同一直線上となる場合は、この3角形データをゼロ3角形データとして、同一直線上とならない場合は、この3角形データを実3角形データとして、無誤差幾何データ記憶部4に格納する。以上の処理をすべての3角形データに関して行う。
次に、3角形相互の相対位置の変化に関して、2つの3角形の位置関係をすべて列挙する。図5は、3角形相互の相対位置の変化により発生する2つの3角形の位置関係を説明するための模式図であり、図5に示すように、5通りのみとなる。
(1)離れている(3角形a及び3角形b)
(2)交差する(3角形a及び3角形c)
(3)線(辺)で接する(3角形a及び3角形d)
(4)点(頂点)で接する(3角形a及び3角形e)
(5)重なる(同一平面上)(3角形a及び3角形f)
上記の(2)、(3)及び(5)の場合は、幾何矛盾が発生する(場合がある)ので、幾何矛盾形状を除去するために、本実施の形態では、以下に説明する重なり面検出除去処理及び反転境界面検出除去処理を行っている。
まず、重なり3角形処理部72は、重なり3角形面を検出して除去する重なり面検出除去処理を実行する。具体的には、重なり3角形処理部72は、組にした3角形面データの同一平面判定及び面の向きの判定結果に基づき、3角形面が重なっていると判定した3角形面に対してその重なりを除去する。
図6は、重なり面の一例を示す模式図である。図6の(1)に示す立体は、図6の(2)に示す断面を有し、この立体に対する処理により頂点データが変動すると、図6の(3)に示す断面を有することとなり、境界面に重なる部分(重なる3角形)が発生する。本実施の形態では、重なり3角形処理部72により、このような重なる3角形を検出して除去する。
図7は、重なり面検出除去処理を説明するための模式図である。例えば、幾何矛盾の1つとして、図7の(8)に示すように、3角形面が重なり、面のしわとなる場合がある。図7の(8)では、形状の断面図を示しており、頂点A,B,C,D,Eは、同一平面上にあり、3角形面tiとtjとが重なっている。このように面が重なるときは、図7の(8)に矢印で示すように、面の向きは必ず逆となる。
このような重なり3角形データの検出除去処理として、まず、同一平面上となり、且つ面の向きが逆となる2つの3角形データのペアを探索する。このために、2つの実3角形データti,tjを無誤差幾何データ記憶部4から順次読み出し、同一平面判定及び面の向き判定を行う。両者が同一平面且つ面の向きが逆となる場合が、重なり面処理の対象となる。同一平面とならない場合又は向きが同じとなる場合は、次の実3角形データのペアに処理を進める。
両者が同一平面かつ面の向きが逆となる場合は、両者tiとtjとが重なるかどうかの判定を行う。重ならない場合は次の実3角形データのペアに処理を進める。両者が重なる場合は、一方の3角形の頂点により他方の3角形を分割する。このときのパターンは、図7の(1)〜(4)に示すように、4通りある。図7の(1)と(2)のパターンの場合のみが、分割処理の対象となり、3角形ABCが頂点Dにより分割される。また、図7の(2)の場合、不必要な分割をなくすためにゼロ3角形分割を行い、3角形ADCがゼロ3角形となる。
次に、この分割された3角形が他方の分割される前の3角形の内部にあるかどうかの判定処理を順次行う。判定される3角形の3つの頂点すべてが、もう一方の3角形の内部(辺上を含む)となる場合は、前者の3角形は後者の内部となる(含まれる)。そして、内部となる場合は、この3角形データを消去する。また、判定される3角形の3つの頂点が、他方の内部及び外部の両方となる場合(またがる場合)は、3角形の位相変形を行い、判定される3角形が他方の内部又は外部のどちらかになるようにする。
図7の(5)の例では、分割される前の3角形として、3角形ABCとDEFとが重なっている。これらが互いに他を分割しあうと、3角形ABCは、図7の(6)のように分割される。ここで、3角形CDEとCFDとは、3角形DEFに対して、内部となる部分と外部となる部分との両方がある。そこで、この2つの3角形が構成する4角形CFDEにおいて、その対角線となる辺CDをEFと付け替え、新たな3角形DEFとCFEとを生成する(図7の(7))。これが3角形の位相変形である。これを繰り返すことにより、最終的に、3角形は他方の3角形の内部か外部かのどちらか一方となり、内部及び外部の両方にまたがる場合は、存在しなくなる。
一方、分割された3角形が、他方の分割される前の3角形の外部となる場合は、次の分割された3角形データに処理を進め、以上の処理を、すべての分割された3角形データに関して行う。最後に、消去された3角形に隣接する3角形データを相互に接続する処理(接続情報の更新処理)を行う。以上の処理を、同一平面上且つ面の向きが逆となる実3角形データのすべてのペアにおいて行う。これにより、すべての重なり3角形(面のしわ)を消去することができる。
一方、反転境界面処理部73は、反転境界面を検出して除去する反転境界面検出除去処理を実行し、同じ立体を構成する面同士が交差している立体を検出して除去する。具体的には、反転境界面処理部73は、自己干渉立体を分離し、立体の最上位の3角形面を探索し、立体の最近傍上位立体を探索し、最近傍上位立体順に立体をソーティングし、面の向きにより立体を消去する。
図8は、矛盾立体の一例を示す模式図である。図8の(1)に示す立体の頂点データの変動により、図8の(2)に示すように、底面(頂点A)が上面を突き抜けること(交差)が起こり得る。突き抜けた部分(図8の(2)のハッチング部分)は、面の表裏が逆になる。反転境界面とは、このように面の表裏が反転している矛盾境界面である。この境界面を構成する3角形は、上記3角形の位置関係のうち、(2)交差又は(3)線接触のどちらかとなる。反転境界面処理部73は、図8の(2)に示すように、この自己交差する境界面の交線を求め、図8の(3)に示すように、この交線により境界面を分割分離し、図8の(4)に示すように、反転境界面(矛盾立体)を消去する。
上記の反転境界面の検出除去処理は、自己干渉立体の分離処理、立体の最上位3角形の探索処理、立体の最近傍上位立体の探索処理、最近傍上位立体順に立体データのソーティング、面の向きによる立体の消去処理の順で行われる。
図9は、矛盾立体を説明するための模式図であり、立体の断面図を示しており、ハッチング領域が形状の内部である。図9の(1)では、立体の一部で表裏が反転(逆転)し、反転境界面が発生している。そこで、図9の(2)に示すように、この部分を切り離す処理が分離処理となる。また、図9の(3)では、立体の内部にある穴が外部にはみ出している。そこで、図9の(4)に示すように、このはみ出し部分を分離する。ここで、自己干渉立体とは、図9の(1)、(3)に示すように、同じ立体を構成する面(3角形面)どうしが交差している立体である。自己干渉立体の分離処理では、図9の(2)、(4)に示すように、この交差している面(3角形面)をその交線において分割し、1つの閉じた面(立体)とする処理である。
自己干渉立体の分離処理として、まず、2つの実3角形データti,tj(i=1,2,…、j=1,2,…)を無誤差幾何データ記憶部4から順次取り出し、両者の交差判定処理を行う。交差する場合は、両方の3角形ti,tjの共通交線sk(k=1,2,…)を求めて、この共通交線において両者を分割する。
図9の(5)の例では、交線ABにおいて、3角形tiとtjとが交差している。このとき、共通交線skはCDとなる。本実施形態では、重なり3角形検出除去処理において説明したように、不必要な分割をなくすために、ゼロ3角形分割を行う。ここでの分割パターンは、図9の(6)に示すように、2通りとなる。共通交線CDにおいて、その端点C側は3角形の辺上となり、ゼロ3角形分割が行われ、3角形ECGはゼロ3角形となる。もう一方の端点Dは、3角形面内となり、通常の分割が行われる。
そして、この分割処理において、共通交線と一致する3角形の辺が存在しない場合は、重なり3角形検出除去処理において説明した位相変形を行い、共通交線と一致する3角形の辺を生成する。以上の処理をすべての実3角形データのぺアに関して繰り返す。
次に、この交線skを挟んで隣接する3角形の隣接情報を変更する。この処理をすべての交線データskに関して行う。これにより、自己干渉立体を分離することができる。図10及び図11は、自己干渉立体の分離処理において求めた共通交線sk近傍の面の交差パターンを示す模式図である。これらは立体の断面図であり、黒点は共通交線を示し、ハッチングがある側が立体の内部である。
図10の(1)では、面(3角形面)taとtbとが完全に交差している。この場合は当然両者の面の接続関係を共通交線において切り替える。図10の(2)の場合は、両者の面が形状の内側(内部)において接している場合である。この場合も、接続関係を切り替える。図10の(3)の場合は、両者の面が形状の外側(外部)において接している場合である。この場合は、接続関係は切り替えず、そのままとする。図10の(4)は、両者の面が接し、且つ面の向きが同じとなる場合である。この場合も、接続関係は切り替えない。
図11の(1)、(2)は、面(3角形面)taとtbとにおいて、同一平面となる部分がある場合である。このような場合は、面taが面tbに対して内部となる場合のみ、接続関係を切り替える。したがって、図11の(1)の場合にのみ切り替え、図11の(2)の場合は、面taが面tbに対して外部となるので、接続関係は切り替えない。ここでは、内部となる場合を切り替えるとしたが、この基準をまったく逆にして、外部となる場合を切り替えるとしても何ら問題はない。また、図11の(1)、(2)では、同一平面となる部分の面の向きが同じとなる場合を図示しているが、面の向きが逆となる場合も勿論存在する。しかし、このような場合は、重なり3角形の検出除去処理(同一平面且つ面の向きが逆)において、検出及び除去されるので、ここでは対象外となる。
次に、最上位3角形の探索処理について説明する。最上位3角形とは、1つの立体(1つの閉じた境界面)において、その立体を構成する3角形の中で、Z座標値が最大となる頂点を持ち、且つ上面が存在しない3角形である。4次元同次座標系において、頂点Va=(Xa,Ya,Za,wa)のZ座標値がVb=(Xb,Yb,Zb,wb)より大きいとは、以下の式(15)が成り立つことである。
Zawb>Zbwa (wa,wb>0) (15)
また、3角形F012が3角形F345に対して(Z座標軸に関して)上面になるとは、この2つの3角形F012とF345とがZ座標軸方向からみて重なり、且つ3角形F012の3つの頂点V0=(X0,Y0,Z0,w0)、V1=(X1,Y1,Z1,w1)及びV2=(X2,Y2,Z2,w2)において、以下の式(16a)又は(16b)が成り立つことである。ただし、3角形F012とF345は交差しないとする。
(0<s0)∨(0<s1)∨(0<s2) (0<C345) (16a)
(s0<0)∨(s1<0)∨(s2<0) (C345<0) (16b)
ここで、s0等は、下式で与えられる。
s0=V0F345=X0A345+Y0B345+Z0C345+w0D345 (17a)
s1=V1F345=X1A345+Y1B345+Z1C345+w1D345 (17b)
s2=V2F345=X2A345+Y2B345+Z2C345+w2D345 (17c)
さらに、2つの3角形が、Z座標軸方向からみて、重なるかどうかの判定処理に関して説明する。4次元同次座標系(X,Y,Z,w)において、Z座標を無視した3次元同次座標系(X,Y,w)を想定する。この座標系における3角形の重なり判定処理に帰着することができる。この処理は、3角形の頂点と、方向を持った辺との位置関係判定処理(判定処理)に帰着する。
次に、最上位3角形を求める処理について説明する。まず、最上位頂点Vmaxに適当な初期値(例えば、存在する頂点データ)を代入する。次に、無誤差幾何データ記憶部4から、処理対象となる1つの立体を構成する実3角形データを順次読み出し、さらにその実3角形を構成する3つの頂点データv0,v1,v2を読み出して比較し、Z座標値が最大となる頂点データVを求める。
次に、この頂点データVと最上位頂点データVmaxのZ座標値を比較し、Vが大きい場合は、Vmax=Vとする。以上の処理を、処理対象立体のすべての実3角形データに関して行う。以上の処理により、処理対象立体において、Z座標値が最大となる最上位頂点Vmaxが求まる。
次に、最上位3角形Tmaxと基準3角形Tbaseに適当な初期値を代入する。例えば、処理対象立体において、最上位頂点Vmaxを頂点に持つ適当な実3角形データを両者に代入する。そして、処理対象立体において、この最上位頂点Vmaxを頂点に持つ実3角形データtiを無誤差幾何データ記憶部4から順次取り出す。
次に、この3角形tiとTbaseとがZ座標軸方向からみて重なるかどうかの判定を行う。重なる場合は、この3角形tiとTmaxとがZ座標軸方向からみて重なるかどうかの判定を行う。重なる場合は、3角形tiとTmaxとの位置関係をチェックする。3角形tiがTmaxの上面となる場合(Tmax<ti)は、Tmax=tiとする。以上の処理をすべての実3角形データtiに関して行う。これにより、最上位3角形Tmaxが求まる。
次に、最近傍上位立体について説明する。図12は、最近傍上位立体を説明するための模式図である。ある立体biの最近傍上位立体bnearとは、以下の条件を満たす立体のことであり(図12参照)、最近傍上位立体とは、ある立体(1つの閉じた境界面)に、Z座標軸正方向に最も近い立体のことである。
(1)立体biの最上位頂点Vmax=(Xmax,Ymax,Zmax,wmax)にZ座標軸と平行に正方向に立てた半直線と交差又は接する立体。
(2)この交点又は接点をVnear=(Xnear,Ynear,Znear,wnear)とすると、Vnearは、頂点Vmax=(Xmax,Ymax,Zmax,wmax)に最近傍となる立体。(ここで、Vnearを最近傍上位点と呼ぶことにする。)
(3)Z座標軸方向から見て、立体biの最上位3角形Tmaxと重なる上面Tnearを持つ立体。
(4)上記上面Tnearが複数個ある場合は、その中で最も下面となる面を持つ立体。(ここで、下面とは、3角形t2が3角形t3の上面となる場合、逆にt3はt2に対して下面となる(図12参照)。また、この最も下面となる面Tnearを最近傍上位3角形と呼ぶことにする。)
図12の例では、立体の断面図を示しており、立体b0の最上位頂点はVmax=v0、最上位3角形はTmax=t1である。立体b1は、半直線Lと接し、且つ最近傍頂点v1を持つが、Tmaxと重なる面が存在しない。そこで、立体b1は、立体b0の最近傍上位立体ではない。
一方、立体b2は、半直線Lと接し、且つ(立体b1は対象外となるので)最近傍上位点(頂点)v2を持ち、且つ最上位3角形Tmaxと重なる面t3が存在する。そこで、立体b2が、立体b0の最近傍上位立体となる。ここで、最上位3角形Tmaxと重なる面はt2とt3との2つが存在するが、両者を比較すると、t3がt2の下面となるので、t3が最近傍上位3角形Tnearとなる。
次に、最近傍上位立体を求める処理について説明する。ここでは、立体biの最近傍上位立体bnearを求める。まず、立体biの最上位頂点Vmaxを通るZ座標軸と平行な直線Lを求める。そして、TnearにNULLを設定して初期設定を行う。NULLは「値なし」(該当データなし)を意味する。また、最近傍上位頂点Vnearには、Z座標値に適当な大きな値、X、Y、w座標値にVmaxと同じ値を代入することにより初期設定を行う。
次に、立体biとは異なる他の立体の実3角形データtjを無誤差幾何データ記憶部4から順次読み込む。そして、このtjと直線Lとの交点Vsが存在するかどうかを判定し、存在する場合はVsを求める。交点Vsが存在する場合は、VmaxとVsのZ座標値を比較する。VsのZ座標値がVmaxのZ座標値より小さい場合(Vs<Vmax)は、次の実3角形データに処理を移す。逆に、Vmax≦Vsとなる場合は、この3角形tjとTmaxがZ座標軸方向からみて重なるかどうかの判定処理、及び頂点データを比較してtjがTmaxの上面となるかどうか(Tmax≦tj)の判定処理を行う。
tjとTmaxとがZ座標軸方向からみて重なり、且つtjがTmaxの上面となる場合(Tmax≦tj)は、VsとVnearとを比較し、Vnear<Vsとなる場合は、次の実3角形データに処理を移す。Vs<Vnearとなる場合は、Vnear=Vs、Tnear=tjとする。
一方、Vs=Vnearとなる場合は、3角形tjとTnearとがZ座標軸方向からみて重なるかどうかの判定処理、及び頂点データを比較してtjがTnearの下面となるかどうか(tj≦Tnear)の判定処理を行う。tjとTnearとがZ座標軸方向からみて重なり、且つtjがTnearの下面となる場合(tj≦Tnear)は、Vnear=Vs、Tnear=tjとする。
以上の処理を、立体bi以外のすべての実3角形データに関して行う。以上の処理により、最近傍上位頂点Vnear、最近傍上位3角形Tnearが求まる。そして、立体biの最近傍上位立体bnear=Tnearが属する立体として求まる。
次に、最近傍上位立体順に立体データをソーティングする処理について説明する。最近傍上位立体順に立体データbiをソーティング処理するとは、立体データ(幾何図形データの集合体(実3角形データ又はゼロ3角形データの集合体))biとbj(i<j)において、biの最近傍上位立体bnearがbjとなる場合は、両者のデータの順番を入れ替えることである。ここでは、biがbjよりもデータの先頭にある(i<j)ので、biとbjとのデータ順を入れ替え、bjがbiよりもデータの先頭となるようにする。この処理により、ある立体biの最近傍上位立体データbnearは、必ず立体データbiよりも上位となる(先頭となる)。図12の例では、立体データの順番は上位から、b3、b2、b1、b0の順番となる。
次に、面の向きによる立体の消去処理について説明する。面の向きによる立体の消去処理とは、ある立体の面の表裏が最近傍上位立体との関係で矛盾する場合は、この矛盾する立体データの消去を行う処理である。
図13は、面の向きと矛盾立体との関係を説明するための模式図である。図13は、立体の断面図を表しており、ハッチングのある側が立体(形状)の内部、ハッチングのない側が立体の外部を表現している。言い換えれば、矢印の向きが立体の内部を表している。
図13の(1)、(2)の場合は、立体Aにおいて、最近傍上位立体がない場合である。このような場合は、立体Aの最上位面(最上位3角形)のZ軸方向の向きを用いて判定を行う。図13では、立体Aにおける矢印はすべて、立体Aの最上位3角形(面)のZ軸方向の向きを表している。
図13の(1)では、立体Aの最上位3角形のZ軸方向の向きはマイナスとなっている。このような場合は、立体Aは矛盾立体ではないので、消去されない。一方、図13の(2)では、立体Aの最上位3角形のZ軸方向の向きはプラスとなっている。このような場合は、立体Aは矛盾立体となる(境界面の裏表が反転し空間全体に立体の内部が広がっている)ので、消去される。
図13の(3)〜(6)の場合は、立体Aの最近傍上位立体が存在する場合である。ここでは、立体Bが立体Aの最近傍上位立体となる。また、立体Bにおける矢印はすべて、立体Aに対する最近傍上位3角形(面)のZ軸方向の向きを表している。図13の(3)〜(6)の場合は、立体Aの最上位3角形と、立体Aに対する(立体Bに属する)最近傍上位3角形のZ軸方向における向きの組み合わせをチェックする。図13の(3)、(6)に示すように、両者のZ軸方向の向きが逆となる場合は、立体Aは立体Bに対して無矛盾立体となる。そこで、このような場合は、立体Aは消去されない。一方、図13の(4)、(5)の場合は、両者のZ軸方向の向きが同じとなる。境界面Aは境界面Bに対して面の裏表が反転している。このような場合は、立体Aは立体Bに対して矛盾立体となる。そこで、このような場合は、立体Aは消去される。
次に、面の向きによる立体の消去処理について具体的に説明する。ここでは、立体データbiの幾何矛盾チェックを、データ順に(データの先頭から)行う。まず、初期処理として、すべての立体データの消去フラグをすべてOFFにする。ここで、OFFは消去しない(無矛盾立体である)ことを意味する。そして、立体b=bi(i=1,2,…)とし、次に、立体bの最近傍上位立体bnearが存在するかをチェックする。
立体bの最近傍上位立体bnearが存在しない場合は、立体bの最上位3角形TmaxのZ座標軸方向の向きをチェックする。Z座標軸方向の向きが正の場合は幾何矛盾となるので、立体データbの消去フラグをON(消去を意味する)とし、負の場合は幾何矛盾とならないので、立体データbの消去フラグをOFFのままとする。ここでの処理は、図13の(1)、(2)の場合に対応している。
一方、立体bの最近傍上位立体bnearが存在する場合は、bnearの消去フラグがONかOFFかのチェックを行う。消去フラグがONの場合は、この最近傍上位立体bnearは矛盾立体であり消去されるので、さらに上位(データの先頭側)の消去フラグがOFFとなっている無矛盾立体である最近傍上位立体を探す。
消去フラグがOFFとなっている最近傍上位立体bnearが存在する場合は、このbnearの最近傍上位3角形Tnearと、立体bの最上位3角形TmaxのZ座標軸方向の向きの組み合わせをチェックする。TnearとTmaxのZ座標軸方向の面の向きの組み合わせが同じとなる場合は(図13の(4)、(5)の場合)、立体bは矛盾立体となるので、立体bの消去フラグをONとする。面の向きの組み合わせが逆となる場合は(図13の(3)、(6)の場合)、立体bは矛盾しないので、消去フラグはOFFのままとする。そして、次の立体に処理を移す。
以上の処理をすべての立体データbiに関して行うことにより、すべての立体の幾何矛盾チェックが完了し、その結果として、消去フラグの値(ON又はOFF)が確定する。最後に、消去フラグがONとなっているすべての立体データを無誤差幾何データ記憶部4から消去する。これにより、すべての矛盾立体が消去され、無矛盾立体だけが保存される。上記の幾何無矛盾化処理としては、特願2004−004690号「3次元幾何データの無矛盾化方法及びそのシステム」に記載される幾何無矛盾化処理を用いることができるので、さらに詳細な説明は省略する。
本実施の形態では、誤差幾何データ記憶部2が誤差記憶手段の一例に相当し、無誤差幾何データ記憶部4が無誤差記憶手段の一例に相当し、誤差幾何処理部3が誤差演算手段の一例に相当し、データ変換処理部62が変換手段の一例に相当し、幾何無矛盾化処理部7、4次元同次座標系幾何処理部52及び可変長ビット整数演算器53が除去手段の一例に相当する。また、無誤差幾何処理部5が無誤差演算手段の一例に相当し、数値データ切り捨て処理部61が切り捨て手段の一例に相当し、退化3角形処理部71が退化3角形検出除去手段の一例に相当し、重なり3角形処理部72が重なり面検出除去手段の一例に相当し、反転境界面処理部73が反転境界面検出除去手段の一例に相当する。
次に、上記のように構成された幾何図形データ処理装置による幾何図形データ処理について説明する。図14は、図1に示す幾何図形データ処理装置による幾何図形データ処理を説明するためのフローチャートである。
図14に示すように、まず、ステップS11において、外部インターフェース部1は、外部システム8から出力される幾何図形データを読み込み、誤差幾何(浮動小数点)データの場合は、誤差幾何データ記憶部2に記憶させ、無誤差幾何(整数)データの場合は、無誤差幾何データ記憶部4に記憶させる。
次に、ステップS12において、数値データ切り捨て処理部61は、幾何図形データが誤差幾何データの場合は、誤差幾何データ記憶部2の頂点データ記憶部22から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、頂点データ記憶部22に再び格納し、幾何図形データが無誤差幾何データの場合は、無誤差幾何データ記憶部4の同次頂点データ記憶部42から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、同次頂点データ記憶部42に再び格納する。
次に、ステップS13において、外部インターフェース部1は、外部システム8からの指示に応じて、入力された幾何データに対して無誤差幾何処理を行うか又は誤差幾何処理を行うか、若しくは幾何図形データ処理が終了したかを判断し、無誤差幾何処理を行う場合はステップS14へ処理を移行し、誤差幾何処理を行う場合はステップS24へ処理を移行し、幾何図形データ処理を終了する場合はステップS28へ処理を移行する。
無誤差幾何処理を行う場合、ステップS14において、無誤差幾何処理部5は、無誤差幾何データ記憶部4に無誤差幾何データが存在するか否かをチェックし、無誤差幾何データが存在しない場合はステップS15へ処理を移行し、無誤差幾何データが存在する場合はステップS20へ処理を移行する。
無誤差幾何データが存在しない場合、ステップS15において、データ変換処理部62は、誤差幾何データ記憶部2から誤差幾何データを順次読み出し、ユークリッド座標から同次座標への変換及び浮動小数点データから整数データへの変換を行い、無誤差幾何データを無誤差幾何データ記憶部4に格納させる。次に、ステップS16において、データ変換処理部62は、変換した誤差幾何データ(元データ)を誤差幾何データ記憶部2から消去する。
次に、ステップS17において、幾何無矛盾化処理部7は、上記のデータ変換処理により幾何矛盾が発生している可能性があるので、幾何無矛盾化処理を行う。すなわち、幾何無矛盾化処理部7は、変換された無誤差幾何データを無誤差幾何データ記憶部4から順次読み出し、退化3角形処理部71、重なり3角形処理部72及び反転境界面処理部73による幾何無矛盾化処理を実行し、無矛盾となった無誤差幾何データを無誤差幾何データ記憶部4に再び格納する。
次に、ステップS18において、数値データ切り捨て処理部61は、無矛盾となった無誤差幾何データである頂点データの数値桁数が増加したか否かを判断し、頂点データの数値桁数が増加していない場合は、ステップS20へ処理を移行し、頂点データの数値桁数が増加した場合は、ステップS19へ処理を移行する。
頂点データの数値桁数が増加した場合、ステップS19において、数値データ切り捨て処理部61は、同次頂点データ記憶部42から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、同次頂点データ記憶部42に再び格納し、その後、ステップS17以降の処理を繰り返す。すなわち、幾何無矛盾化処理により頂点データの数値桁数が増大した場合は、数値データ切り捨て処理部61による頂点データの切り捨て処理(ステップS19)が行われ、この切り捨て処理が行われると、幾何矛盾が発生する場合があるので、幾何無矛盾化処理部7による幾何無矛盾化処理(ステップS17)が再度行われ、頂点データの数値桁数が増大しなくなるまで幾何無矛盾化処理が繰り返される。
無誤差幾何データが存在する場合(ステップS14でYES)又は頂点データの数値桁数が増加していない場合(ステップS18でNO)、ステップS20において、無誤差幾何処理部5は、無矛盾の無誤差幾何データを無誤差幾何データ記憶部4から順次読み出して集合演算等の無誤差幾何処理(可変長整数演算)を無誤差で実行し、その結果としての無誤差幾何データを無誤差幾何データ記憶部4に再び格納する。
上記の無誤差幾何処理が行われると、頂点データの数値桁数が増大する場合があるので、次に、ステップS21において、数値データ切り捨て処理部61は、格納された無誤差幾何データである頂点データの数値桁数が増加したか否かを判断し、頂点データの数値桁数が増加していない場合は、ステップS13へ処理を移行して以降の処理を継続し、頂点データの数値桁数が増加した場合は、ステップS22へ処理を移行する。
頂点データの数値桁数が増加した場合、ステップS22において、数値データ切り捨て処理部61は、ステップS19と同様に、同次頂点データ記憶部42から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、同次頂点データ記憶部42に再び格納する。
次に、ステップS23において、幾何無矛盾化処理部7は、上記の桁数の切り捨て処理により幾何矛盾が発生している可能性があるので、ステップS17と同様に、幾何無矛盾化処理を行い、その後、頂点データの数値桁数が増大しなくなる(幾何矛盾がなくなる)まで、ステップS21以降の処理を繰り返す。上記のステップS14〜S23の処理が、幾何無矛盾化処理等を含む無誤差幾何処理の全体の流れである。
一方、ステップS13において、誤差幾何処理が選択された場合、以下の誤差幾何処理が実行される。まず、ステップS24において、誤差幾何処理部3は、誤差幾何データ記憶部2に誤差幾何データが存在するか否かをチェックし、誤差幾何データが存在しない場合はステップS25へ処理を移行し、誤差幾何データが存在する場合はステップS27へ処理を移行する。
誤差幾何データが存在しない場合、ステップS25において、データ変換処理部62は、無誤差幾何データ記憶部4から無誤差幾何データを順次読み出し、同次座標からユークリッド座標への変換及び整数データから浮動小数点データへの変換を行い、誤差幾何データを誤差幾何データ記憶部2に格納させる。次に、ステップS26において、データ変換処理部62は、変換した無誤差幾何データ(元データ)を無誤差幾何データ記憶部4から消去する。
誤差幾何データが存在する場合(ステップS24でYES)又はステップS26の処理後、ステップS27において、誤差幾何処理部3は、誤差幾何データを誤差幾何データ記憶部2から順次読み出し、座標変換等の誤差幾何処理(浮動小数点演算)を実行し、その結果としての誤差幾何データを誤差幾何データ記憶部2に再び格納し、その後、ステップS13へ処理を移行して以降の処理を継続する。以上のステップS24〜S27が、誤差幾何処理の全体の流れである。
このように、誤差幾何処理が終了した後、処理がステップS13へ戻され、誤差幾何処理が実行された誤差幾何データは、上記のステップS14〜S23の無誤差幾何処理において、無誤差幾何処理をベースにした幾何無矛盾化処理によりその幾何矛盾が除去されるとともに、その桁数が切り捨て処理により必要精度に応じて切り捨てられるので、無誤差幾何データに対して無誤差幾何処理する場合だけでなく、誤差幾何データに対して誤差幾何処理する場合も、幾何矛盾を取り除くことができ、矛盾のない幾何図形データを生成して安定的な処理系を実現することができる。
なお、誤差幾何処理における幾何無矛盾化処理は、無誤差幾何処理の場合のようにいつでも行われる訳ではなく、適宜行われる。以下、誤差幾何処理における幾何無矛盾化処理の流れに関して説明する。まず、無誤差幾何処理がNULL(何も処理をしない)とセットされた後、ステップS14〜S23の無誤差幾何処理が行われる。次に、誤差幾何処理においてもNULLとセットされた後、ステップS24〜S27の誤差幾何処理が行われる。これにより、誤差幾何処理における幾何無矛盾化処理が完了したことになる。すなわち、幾何矛盾が生じていない誤差(浮動小数点)幾何データが生成されたことになる。ただし、ここでの前提は、ステップS25の無誤差幾何データから誤差幾何データへのデータ変換処理において、変換誤差(桁落ち)が発生しないことである。
最後に、幾何図形データ処理を終了する場合(ステップS28で終了が選択された場合)、外部インターフェース部1は、演算結果が誤差幾何(浮動小数点)データの場合、誤差幾何データ記憶部2から誤差幾何データを読み出し、演算結果が無誤差幾何(整数)データの場合、無誤差幾何データ記憶部4から無誤差幾何データを読み出し、外部システム8へ転送する。
上記の処理により、本実施の形態では、誤差演算処理を実行された誤差幾何データを無誤差幾何データへ変換し、変換された無誤差幾何データに対して発生する幾何矛盾を検出して除去しているので、適用できる幾何処理の範囲が非常に広い誤差演算処理を用いることができるとともに、誤差演算処理における誤差により発生する幾何矛盾を、無誤差幾何処理をベースにした幾何無矛盾化処理により取り除くことができ、矛盾のない幾何図形データを生成して安定的な処理系を実現することができる。
なお、上記の説明では、誤差幾何データに対する切り捨て処理を、無誤差幾何処理の中で行っているが、この例に特に限定されず、誤差幾何処理(ステップS27)の実行後等の誤差幾何処理の中で行い、幾何無矛盾化処理のみを無誤差幾何処理の中で行うようにしてもよい。
また、本実施の形態では、スタンドアローン型の幾何図形データ処理装置を用いているが、この例に特に限定されず、インターネット等のネットワークを介して接続されるクライアント装置及びサーバ装置から構成するようにしてもよい。
また、本実施の形態では、4次元同次座標系幾何処理を用いたが、同次座標幾何処理として、他の次元の同次座標幾何処理を用いてもよい。