(57)【要約】【課題】  安定的な処理系を実現することができるとともに、その適用範囲が広い幾何図形データ処理装置を提供する。【解決手段】  誤差幾何処理部３は、誤差幾何データ記憶部２に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理し、データ変換処理部６２は、誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換し、幾何無矛盾化処理部７は、変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去する。【選択図】      図１
2006323465.tif 000002
【特許請求の範囲】
【請求項１】
幾何図形データに対して演算処理を行う幾何図形データ処理装置であって、
幾何図形データを誤差有り形式で記憶するための誤差記憶手段と、
幾何図形データを無誤差形式で記憶するための無誤差記憶手段と、
前記誤差記憶手段に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理する誤差演算手段と、
前記誤差演算手段により誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換する変換手段と、
前記変換手段により変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去する除去手段とを備えることを特徴とする幾何図形データ処理装置。
【請求項２】
前記無誤差記憶手段に記憶されている無誤差形式の幾何図形データを無誤差演算により処理する無誤差演算手段と、
前記誤差記憶手段及び前記無誤差記憶手段に記憶されている幾何図形データの数値を必要精度に応じて切り捨てる切り捨て手段とをさらに備え、
前記変換手段は、さらに、前記無誤差記憶手段に記憶されている無誤差形式の幾何図形データを誤差有り形式の幾何図形データへ変換し、
前記除去手段は、前記誤差演算手段により誤差有り演算処理を実行された幾何図形データ、前記変換手段によりデータ形式の変換処理が実行された幾何図形データ、及び前記切り捨て手段により切り捨て処理が実行された幾何図形データに対して発生する幾何矛盾を検出して除去することを特徴とする請求項１記載の幾何図形データ処理装置。
【請求項３】
前記幾何図形データは、３角形面データ又は３角形の３つの頂点が同一直線上に位置するゼロ３角形データを含み、
前記除去手段は、
前記３角形面データ及び前記ゼロ３角形データに対して発生する幾何矛盾のうち退化３角形面を検出して除去する退化３角形検出除去手段と、
前記３角形面データ及び前記ゼロ３角形データに対して発生する幾何矛盾のうち重なり３角形面を検出して除去する重なり面検出除去手段と、
前記３角形面データ及び前記ゼロ３角形データに対して発生する幾何矛盾のうち反転境界面を検出して除去する反転境界面検出除去手段とを備えることを特徴とする請求項１又は２記載の幾何図形データ処理装置。
【請求項４】
前記除去手段は、同次座標幾何処理と可変長ビットの整数演算とを用いて無誤差幾何処理を行うことにより前記幾何図形データに対して発生する幾何矛盾を検出して除去することを特徴とする請求項１〜３のいずれかに記載の幾何図形データ処理装置。
【請求項５】
前記切り捨て手段は、前記除去手段により幾何矛盾を除去された幾何図形データの数値の桁数が増加した場合、当該幾何図形データの数値を必要精度に応じて切り捨てることを特徴とする請求項４記載の幾何図形データ処理装置。
【請求項６】
幾何図形データを誤差有り形式で記憶するための誤差記憶手段と、幾何図形データを無誤差形式で記憶するための無誤差記憶手段と、誤差演算手段と、変換手段と、除去手段とを備える幾何図形データ処理装置を用いて、幾何図形データに対して演算処理を行う幾何図形データ処理方法であって、
前記誤差演算手段が、前記誤差記憶手段に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理するステップと、
前記変換手段が、前記誤差演算手段により誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換するステップと、
前記除去手段が、前記変換手段により変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去するステップとを含むことを特徴とする幾何図形データ処理方法。
【請求項７】
幾何図形データに対して演算処理を行うための幾何図形データ処理プログラムであって、
幾何図形データを誤差有り形式で記憶するための誤差記憶手段と、
幾何図形データを無誤差形式で記憶するための無誤差記憶手段と、
前記誤差記憶手段に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理する誤差演算手段と、
前記誤差演算手段により誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換する変換手段と、
前記変換手段により変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去する除去手段としてコンピュータを機能させることを特徴とする幾何図形データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、幾何図形データに対して演算処理を行う幾何図形データ処理装置、幾何図形データ処理方法及び幾何図形データ処理プログラムに関するものである。
【背景技術】
【０００２】
従来、幾何図形処理は、浮動小数点演算を用いて行うのが一般的である。この浮動小数点演算を用いた幾何図形処理は、幅広い幾何図形処理に適用でき、処理が高速で高い実用性がある。しかしながら、浮動小数点演算では、通常、演算桁数（有効桁数）が一定であるため、演算誤差が発生し、この演算誤差が浮動小数点演算の繰り返しにより蓄積されていく。このような演算誤差及びその蓄積により、浮動小数点演算をベースとした幾何図形処理では、処理が破綻して処理系が暴走するという問題があった。以下、この浮動小数点演算等の誤差を生じる演算をベースにした幾何処理を、誤差（有り）幾何処理（誤差（有り）演算処理）と呼ぶことにする。
【０００３】
上記の浮動小数点演算の演算誤差及びその蓄積による幾何処理の破綻を解決する方法として、本願発明者は、超３角形（ゼロ３角形）幾何図形データ処理、４次元同次座標系幾何処理及び可変長ビットの整数演算（可変長整数演算）を統合化することにより、演算誤差が発生しない幾何処理を提案した（特許文献１を参照）。この方法では、計算誤差をまったくなくすことにより、計算誤差により生じる幾何演算の破綻を回避し、処理系の完全な安定性を実現することができる。以下、この可変長整数演算等の誤差が発生しない演算をベースにした幾何処理を、無誤差幾何処理（無誤差演算処理）と呼ぶことにする。
【特許文献１】特許第３１５１７１０号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、誤差幾何処理は、適用できる幾何図形処理の範囲が非常に広いが、演算誤差とその蓄積のために、処理が破綻して処理系が暴走し、完全に安定的な処理系を構築することが困難であり、一方、無誤差幾何処理は、幾何処理系の完全な安定性（１００％の信頼性）を実現することができるが、適用できる幾何図形処理の範囲が非常に狭く、集合演算等にしか適用できない。
【０００５】
本発明の目的は、安定的な処理系を実現することができるとともに、その適用範囲が広い幾何図形データ処理装置、幾何図形データ処理方法及び幾何図形データ処理プログラムを提供することである。
【課題を解決するための手段】
【０００６】
本発明に係る幾何図形データ処理装置は、幾何図形データに対して演算処理を行う幾何図形データ処理装置であって、幾何図形データを誤差有り形式で記憶するための誤差記憶手段と、幾何図形データを無誤差形式で記憶するための無誤差記憶手段と、誤差記憶手段に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理する誤差演算手段と、誤差演算手段により誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換する変換手段と、変換手段により変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去する除去手段とを備えるものである。
【０００７】
本発明に係る幾何図形データ処理装置では、誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換し、変換した無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去しているので、適用できる幾何図形処理の範囲が非常に広い誤差有り演算処理を用いることができるとともに、誤差有り演算処理における誤差により発生する幾何矛盾を、無誤差演算処理をベースにした幾何無矛盾化処理により取り除くことができ、矛盾のない幾何図形データを生成して安定的な処理系を実現することができる。
【０００８】
上記幾何図形データ処理装置は、無誤差記憶手段に記憶されている無誤差形式の幾何図形データを無誤差演算により処理する無誤差演算手段と、誤差記憶手段及び無誤差記憶手段に記憶されている幾何図形データの数値を必要精度に応じて切り捨てる切り捨て手段とをさらに備え、変換手段は、さらに、無誤差記憶手段に記憶されている無誤差形式の幾何図形データを誤差有り形式の幾何図形データへ変換し、除去手段は、誤差演算手段により誤差有り演算処理を実行された幾何図形データ、変換手段によりデータ形式の変換処理が実行された幾何図形データ、及び切り捨て手段により切り捨て処理が実行された幾何図形データに対して発生する幾何矛盾を検出して除去することが好ましい。
【０００９】
この場合、誤差有り形式の幾何図形データと、無誤差形式の幾何図形データとの双方向データ変換を実現し、誤差有り演算処理と無誤差演算処理とを統合化（ハイブリッド化）することができるので、適用できる幾何図形処理の範囲を大幅に拡大して実用性を高めることができる。また、誤差有り演算の誤差により発生する幾何矛盾、幾何図形データのデータ形式の変換により発生する幾何矛盾、及び幾何図形データの数値桁数の切り捨てにより発生する幾何矛盾を検出して除去しているので、幾何図形データにおける矛盾（不整合）をなくして処理系の安定性を確実に確保することができる。
【００１０】
幾何図形データは、３角形面データ又は３角形の３つの頂点が同一直線上に位置するゼロ３角形データを含み、除去手段は、３角形面データ及びゼロ３角形データに対して発生する幾何矛盾のうち退化３角形面を検出して除去する退化３角形検出除去手段と、３角形面データ及びゼロ３角形データに対して発生する幾何矛盾のうち重なり３角形面を検出して除去する重なり面検出除去手段と、３角形面データ及びゼロ３角形データに対して発生する幾何矛盾のうち反転境界面を検出して除去する反転境界面検出除去手段とを備えることが好ましい。
【００１１】
この場合、ゼロ３角形データを用いることにより、不必要な数値桁数の増大及び不必要なデータ量の増大を抑制することができるとともに、幾何図形データにおける幾何矛盾を効率的に除去することができる。
【００１２】
除去手段は、同次座標幾何処理と可変長ビットの整数演算とを用いて無誤差幾何処理を行うことにより幾何図形データに対して発生する幾何矛盾を検出して除去することが好ましい。
【００１３】
この場合、割算を排除してすべての演算を無誤差で行うことができるので、幾何矛盾除去処理を無誤差で行うことができ、処理系の安定性をより確実に確保することができる。
【００１４】
切り捨て手段は、除去手段により幾何矛盾を除去された幾何図形データの数値の桁数が増加した場合、当該幾何図形データの数値を必要精度に応じて切り捨てることが好ましい。
【００１５】
この場合、幾何図形データにおける幾何矛盾を除去しながら、幾何矛盾除去処理により発生する不必要な数値桁数の増大及び不必要なデータ量の増大を抑制することができる。
【００１６】
本発明に係る幾何図形データ処理方法は、幾何図形データを誤差有り形式で記憶するための誤差記憶手段と、幾何図形データを無誤差形式で記憶するための無誤差記憶手段と、誤差演算手段と、変換手段と、除去手段とを備える幾何図形データ処理装置を用いて、幾何図形データに対して演算処理を行う幾何図形データ処理方法であって、誤差演算手段が、誤差記憶手段に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理するステップと、変換手段が、誤差演算手段により誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換するステップと、除去手段が、変換手段により変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去するステップとを含むものである。
【００１７】
本発明に係る幾何図形データ処理プログラムは、幾何図形データに対して演算処理を行うための幾何図形データ処理プログラムであって、幾何図形データを誤差有り形式で記憶するための誤差記憶手段と、幾何図形データを無誤差形式で記憶するための無誤差記憶手段と、誤差記憶手段に記憶されている誤差有り形式の幾何図形データを誤差有り演算により処理する誤差演算手段と、誤差演算手段により誤差有り演算処理を実行された誤差有り形式の幾何図形データを無誤差形式の幾何図形データへ変換する変換手段と、変換手段により変換された無誤差形式の幾何図形データに対して発生する幾何矛盾を検出して除去する除去手段としてコンピュータを機能させるものである。
【発明の効果】
【００１８】
本発明によれば、適用できる幾何図形処理の範囲が非常に広い誤差有り演算処理を用いることができるとともに、誤差有り演算処理における誤差により発生する幾何矛盾を取り除き、矛盾のない幾何図形データを生成することができるので、安定的な処理系を実現することができるとともに、その適用範囲が広い幾何図形データ処理装置等を実現することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の一実施の形態による幾何図形データ処理装置について図面を参照しながら説明する。図１は、本発明の一実施の形態による幾何図形データ処理装置の構成を示すブロック図である。
【００２０】
図１に示す幾何図形データ処理装置は、外部インターフェース部１、誤差幾何データ記憶部２、誤差幾何処理部３、無誤差幾何データ記憶部４、無誤差幾何処理部５、精度管理部６及び幾何無矛盾化処理部７を備え、無誤差幾何処理（可変長整数演算）と誤差幾何処理（浮動小数点演算）とをハイブリッド化した無誤差／誤差ハイブリッド幾何モデリングシステムである。
【００２１】
本幾何図形データ処理装置は、ＣＰＵ（中央演算処理装置）、ＲＯＭ（リードオンリメモリ）、ＲＡＭ（ランダムアクセスメモリ）、外部記憶装置、記録媒体駆動装置、入力装置、表示装置、外部機器インターフェース等を備えるコンピュータから構成することができる。この場合、後述する幾何図形データ処理を実行するための幾何図形データ処理プログラムを、ＣＰＵ等を用いて実行することにより、外部インターフェース部１、誤差幾何データ記憶部２、誤差幾何処理部３、無誤差幾何データ記憶部４、無誤差幾何処理部５、精度管理部６及び幾何無矛盾化処理部７としてコンピュータを機能させることができる。なお、幾何図形データ処理装置の構成は、この例に特に限定されず、上記の各機能の一部又は全部を専用のハードウエアから構成する等の種々の変更が可能である。
【００２２】
ここで、誤差幾何処理及び無誤差幾何処理について詳細に説明する。現在、普及しているほとんどすべての計算機には、浮動小数点演算プロセッサが当然のように装備されている。ユーザは、大抵の場合、この浮動小数点演算プロセッサをほとんど意識することなく用いて、数値計算を日常的に行っている。このため、浮動小数点演算により発生する計算誤差に関しても、あまり注意を払わなくなってきており、計算誤差があることすら意識していない場合も多い。
【００２３】
また、浮動小数点演算では、整数演算に比べて、はるかに広い範囲の数値が扱うことができ、実数を含む数値計算に非常に適しているが、演算による誤差の発生とその蓄積が起こり、誤差管理を行うことは困難である。すなわち、浮動小数点演算における本質的な問題は、真の誤差管理ができていないこと、また出来ないことにある。このため、システム（処理系）が暴走及び破綻し、処理の完全な安定性を実現することが難しく、高信頼性を有するシステムを作成することが困難な場合が多い。
【００２４】
例えば、浮動小数点演算等の誤差を伴う演算をベースにした誤差幾何処理の代表例として、ユークリッド座標系幾何処理がある。３次元幾何処理は、通常、３次元のユークリッド座標系（Ｘ，Ｙ，Ｚ）を用いて行われる。ユークリッド座標系を用いた幾何図形処理は、いろいろな幾何図形処理に幅広く適用することができ、処理が高速で実用性が非常に高い。
【００２５】
しかしながら、ユークリッド座標系の幾何演算では、通常、割り算が発生する。浮動小数点演算を用いた割り算は、その演算誤差のために、計算精度が低下する等の種々の悪影響を及ぼし、システムの信頼性を著しく低下させる。すなわち、本来の幾何学には、誤差という概念そのものがなく、誤差を伴う幾何図形処理（誤差幾何処理）では、処理の完全な安定性（１００％の安定性）は保証されない。
【００２６】
一方、無誤差演算（可変長整数演算）等をベースにした無誤差幾何処理の最大の特徴は、演算誤差の発生がまったくないので、完全に安定的な（１００％の安定性）幾何処理系を作成することができる点である。また、数学的又は幾何学的に作成されたアルゴリズムは、正確な演算を前提にしているので、そのままプログラムとして実装することができ、プログラムの複雑化を招かない等の特徴を持つ。さらに、無誤差幾何処理では、当然、誤差の管理が必要なく、処理系を安定化させる作業はまったく不要となる。
【００２７】
しかしながら、無誤差幾何処理は、無誤差でできる演算の範囲が非常に限定的であること、及び、処理を進めると数値桁数が際限なく増大すること等の本質的な問題点をかかえている。例えば、複数回の集合演算を繰り返すと、幾何図形データを構成する頂点データの数値桁数が際限なく増大していく。
【００２８】
また、４次元同次座標系幾何処理（以下、「同次座標幾何処理」という）は、３次元の幾何図形処理を、１次元次数を上げた４次元同次座標系（Ｘ，Ｙ，Ｚ，ｗ）において行うものである。この４次元同次座標（以下、「同次座標」という）は、割り算前のデータであり、同次座標幾何処理では、割算を回避でき、全ての演算は加減算と乗算とのみで済む。したがって、同次座標幾何処理では、無限桁数の循環小数等が発生することはなく、上記の無誤差演算と相性がよい体系である。したがって、同次座標幾何処理は、無誤差演算と組み合わせることにより、数値的に決して破綻することのない無誤差幾何処理を実現することが可能となる。
【００２９】
上記の知見を基に、本実施の形態では、無誤差幾何処理において、同次座標系の１つであるプリュッカー座標系を用いて、可変長ビットの整数演算により無誤差幾何演算を行っている。以下、この４次元プリュッカー座標系幾何演算（同次座標幾何演算）に関して説明する。
（１）２点から線の生成
２点Ｖ０＝（Ｘ０，Ｙ０，Ｚ０，ｗ０）及びＶ１＝（Ｘ１，Ｙ１，Ｚ１，ｗ１）を通る直線のプリュッカー座標Ｌ０１は、次式で与えられる。なお、Ｖ０，Ｖ１，Ｌ０１は、プリュッカー座標（ベクトル列）を表している。
Ｌ０１＝〔Ｐ０１，Ｑ０１，Ｒ０１，Ｓ０１，Ｔ０１，Ｕ０１〕  （１）
ここで、Ｐ０１等は、下式で与えられる。
【００３０】
【数１】
2006323465.tif 000003
【００３１】
（２）３点から面の生成（平面係数の算出）
３点Ｖ０＝（Ｘ０，Ｙ０，Ｚ０，ｗ０）、Ｖ１＝（Ｘ１，Ｙ１，Ｚ１，ｗ１）及びＶ２＝（Ｘ２，Ｙ２，Ｚ２，ｗ２）を通る面のプリュッカー座標Ｆ０１２は、次式で与えられる。なお、Ｖ０，Ｖ１，Ｖ２，Ｆ０１２は、プリュッカー座標（ベクトル列）を表している。
Ｆ０１２＝〔Ａ０１２，Ｂ０１２，Ｃ０１２，Ｄ０１２〕  （３）
ここで、Ａ０１２等は、下式で与えられる。
【００３２】
【数２】
2006323465.tif 000004
【００３３】
（３）線と面の交点計算
２点Ｖａ＝（Ｘａ，Ｙａ，Ｚａ，ｗａ）及びＶｂ＝（Ｘｂ，Ｙｂ，Ｚｂ，ｗｂ）を通る直線と、面Ｆ０１２との交点Ｖは、次式で与えられる。なお、Ｖａ，Ｖｂ，Ｆ０１２，Ｖは、プリュッカー座標（ベクトル列）を表している。
Ｖ＝Ｓｂ０１２Ｖａ−Ｓａ０１２Ｖｂ  （５）
ここで、
Ｓａ０１２＝ＶａＦ０１２＝ＸａＡ０１２＋ＹａＢ０１２＋ＺａＣ０１２＋ｗａＤ０１２  （≦０）  （６ａ）
Ｓｂ０１２＝ＶｂＦ０１２＝ＸｂＡ０１２＋ＹｂＢ０１２＋ＺｂＣ０１２＋ｗａＤ０１２  （≧０）  （６ｂ）
（４）２点の一致判定
２点Ｖ０＝（Ｘ０，Ｙ０，Ｚ０，ｗ０）とＶ１＝（Ｘ１，Ｙ１，Ｚ１，ｗ１）との一致判定は、この２点を通る直線Ｌ０１において以下の式が成立することである。
Ｌ０１＝〔Ｐ０１，Ｑ０１，Ｒ０１，Ｓ０１，Ｔ０１，Ｕ０１〕＝〔０，０，０，０，０，０〕  （７）
（５）２面の一致判定
２つの平面ｆ０＝〔ａ０，ｂ０，ｃ０，ｄ０〕Ｔとｆ１＝〔ａ１，ｂ１，ｃ１，ｄ１〕Ｔとの一致判定は、点と面の双対性により、上記式（７）と同じ形式となる。
（６）点の面に対する位置判定
点Ｖ＝（Ｘ，Ｙ，Ｚ，ｗ）が、平面Ｆ０１２に対してどの位置にあるかの判定は、次式で与えられる。なお、式（８）において、ｓの符号＋、０、−に対応して、点は、面の正側、面上、面の負側となる。
ｓ＝ＶＦ０１２＝ＸＡ０１２＋ＹＢ０１２＋ＺＣ０１２＋ｗＤ０１２  （８）
（７）２線分の向き判定
２線分Ｌ０１とＬ２３とが同一直線であるときには、両者の向きの判定は、次式で与えられる。なお、式（９）において、両者の向きは、ｓが正のときは同じ方向、負のときは逆向きとなる。
ｓ＝Ｌ０１Ｌ２３  （９）
（８）２面の向き判定
２面Ｆ０１２とＦ３４５とが同一平面であるときには、両者の向きの判定は、次式で与えられる。なお、式（１０）において、両者の向きは、ｓが正のときは同じ方向、負のときは逆向きとなる。
ｓ＝Ｆ０１２Ｆ３４５  （１０）
また、本実施の形態では、上記の無誤差幾何処理と誤差幾何処理とは、排他関係ではなく、補完関係にあると考え、無誤差幾何処理と誤差幾何処理とをハイブリッド化して両者を統合することにより、完全な安定性（信頼性１００％）を実現するとともに、無誤差幾何処理自体の実用性を向上する。すなわち、本実施の形態では、超３角形幾何処理が持つ単純性等の特性を最大限活用し、且つ同次幾何処理及び可変長整数演算をベースにして無誤差幾何処理を実現することにより、幾何無矛盾化処理部７及び無誤差幾何処理部５における処理の完全な安定性を実現する。
【００３４】
ここで、上記の超３角形幾何処理について説明する。図２は、ゼロ３角形及び超３角形幾何処理を説明するための模式図である。３次元幾何モデリング法の１つとして、ＢＲｅｐ（Ｂｏｕｎｄａｒｙ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）が広く普及している。ＢＲｅｐでは、一般的に、図２の（ａ）に示すように、その境界面は任意の多角形面（以下、単に多角形と呼称する）を用いて表現されて処理される。ここでは、境界面が平面で構成される平面多面体ＢＲｅｐに限定する。
【００３５】
幾何図形処理が複雑化するのは、任意の多角形をベースとしていることに主因している。一方、３角形面（以下、単に３角形と呼称する）は究極的に単純な基本図形であり、幾何学的には「２次元単体」と呼ばれる。そこで、３角形のみを用いてＢＲｅｐを構成すると、ある意味で究極的に単純な幾何表現及び処理が実現できる。図２の（ｂ）に示す例は、（ａ）の多角形表現を通常の３角形表現とした図である。
【００３６】
しかしながら、３角形幾何処理は、集合演算などの処理の過程で、３角形の数（データ量）が急激に増えてしまう等の大きな欠点も併せ持つ。この欠点を解消するために、図２の（ｃ）に示すように、通常の３角形幾何の概念を拡張し、３角形の３つの頂点が同一直線上となる退化した３角形幾何を考案した。図２の（ｃ）では、頂点Ａ，Ｂ，Ｃ及びＤは、実際は同一直線上にあり、この退化した３角形をその面積がゼロになることから、「ゼロ３角形」と呼称し、また３つの頂点が同一直線上にない通常の３角形を「実３角形」と呼称する。そして、退化した３角形であるゼロ３角形を包含する３角形幾何処理を、拡張された処理形式ということで超３角形幾何表現処理形式（超３角形幾何処理）と呼称する。
【００３７】
図２の（ｂ）と（ｃ）に示す立体の前面を構成する実３角形の数を比較すると、（ｂ）の従来法では、面を表現するのに１３個が必要であるが、（ｃ）の超３角形法では約半分の７個で済む。このように、ゼロ３角形を用いることにより、より少ない実３角形（通常３角形）で面分を表現することが可能となる。また、ゼロ３角形は、通常の３角形処理から除外できる場合が多い。このように、超３角形幾何処理では、ゼロ３角形を用いることにより、３角形幾何処理の単純性はほとんど損なうことなく、大きな欠点であった３角形の数の増大を抑制することができ、結果として、処理性を向上させることができる。
【００３８】
すなわち、ゼロ３角形は退化図形ではあるが、超３角形幾何処理では、このゼロ３角形の特性をむしろ逆手にとって、長所として積極的に活用しようとするものである。ゼロ３角形は、３角形が完全につぶれた「線形の３角形」であり、３角形と線分との両方の特性（２面性）を合わせ持つ。したがって、超３角形幾何処理では、ゼロ３角形を含む３角形幾何が持つ根元性と単純性とを最大限利用することにより、高効率且つ柔軟な幾何図形処理を実現することができる。
【００３９】
一方、超３角形幾何処理の短所は、ゼロ３角形という退化した、特別且つ特殊な３角形を注意深く取り扱う必要があることである。大抵の場合、実３角形処理（通常３角形処理）とゼロ３角形処理とは別処理となる。このため、処理系が、通常３角形処理に比べて少し複雑化する。また、どの処理を、ゼロ３角形を含む超３角形幾何処理とするかを、通常の３角形幾何処理との比較で検討する必要があるが、両者のバランスをうまく取らないと、処理が効率化されず、データ量も削減されない。
【００４０】
上記の超３角形幾何処理と、３次元ユークリッド座標系及び浮動小数点演算を組み合わせることにより、例えば集合演算の複雑性の問題を解決することができる。この超３角形幾何処理に関しては、特許第３０１８１５１号「３次元図形データの演算処理方法及びその装置」に詳述されているので、さらに詳細な説明は省略する。
【００４１】
しかしながら、上記の超３角形幾何処理では、処理の単純化及び高速化は実現されているが、処理の不安定性の問題は残ったままであり、処理系の１００％の安定性は達成されていない。この超３角形幾何処理の不安定性を根本的に解決するアプローチとして、超３角形幾何処理、同次幾何処理及び無誤差演算（可変長整数演算）を統合化した同次超３角形幾何処理を考案した。この同次超３角形幾何処理では、集合演算の演算誤差による不安定性の問題を解消して１００％の安定性を達成することができる。なお、この同次超３角形幾何処理に関しては、特許第３１５１７１０号「３次元図形の形状演算装置」及び特願２００４−００４６９０「３次元幾何データの無矛盾化方法及びそのシステム」に詳述されているので、さらに詳細な説明は省略する。
【００４２】
再び、図１を参照して、外部インターフェース部１は、計算機等の外部システム８から幾何図形データを読み込むとともに、幾何図形データが誤差幾何データの場合は、誤差幾何データ記憶部２に格納し、幾何図形データが無誤差幾何データの場合は、無誤差幾何データ記憶部４に格納する。また、外部インターフェース部１は、読み込んだ幾何図形データに対して誤差幾何処理又は無誤差幾何処理のいずれを実行すべきかを指示する演算指令を外部システム８から受け付け、誤差幾何データ記憶部２又は無誤差幾何データ記憶部４を介して誤差幾何処理部３又は無誤差幾何処理部５に通知する。さらに、外部インターフェース部１は、本幾何図形データ処理装置により処理された又は新たに生成された幾何図形データを誤差幾何データ記憶部２又は無誤差幾何データ記憶部４から読み出して外部システム８へ転送する。
【００４３】
誤差幾何データ記憶部２は、超３角形データ記憶部２１及び頂点データ記憶部２２を備え、超３角形データ記憶部２１には、誤差幾何処理の対象となる立体データ、実３角形データ、ゼロ３角形データ及び交線データ等の誤差幾何データが記憶され、これらのデータを構成する頂点データがユークリッド座標系を用いて頂点データ記憶部２２に記憶される。
【００４４】
無誤差幾何データ記憶部４は、同次超３角形データ記憶部４１及び同次頂点データ記憶部４２を備え、同次超３角形データ記憶部４１には、無誤差幾何処理の対象となる立体データ、実３角形データ、ゼロ３角形データ及び交線データ等の無誤差幾何データが記憶され、これらのデータを構成する頂点データが同次座標系を用いて同次頂点データ記憶部４２に記憶される。
【００４５】
ここで、本実施の形態に用いられるデータ形式について説明する。図３は、ユークリッド座標系及び同次座標系の座標データ及び数値データ並びに超３角形データのデータ構成の一例を示す図である。
【００４６】
まず、頂点データは、座標データ形式で格納され、誤差幾何処理の場合はユークリッド座標が用いられ、無誤差幾何処理の場合は同次座標が用いられる。具体的には、図３の（ａ）に示すように、ユークリッド座標データ（Ｘ，Ｙ，Ｚ）は、Ｘ座標値、Ｙ座標値及びＺ座標値から構成される。各座標値は、浮動小数点データとして表現され処理される。また、図３の（ｂ）に示すように、浮動小数点データは、符号部、指数部及び仮数部から構成される。
【００４７】
一方、図３の（ｃ）に示すように、同次座標データ（Ｘ，Ｙ，Ｚ，ｗ）は、Ｘ座標値、Ｙ座標値、Ｚ座標値及びｗ座標値から構成される。各座標値は、可変長ビットの整数データとして表現され処理される。また、図３の（ｄ）に示すように、可変長整数データは、語長部、符号部、そして数値部（整数表現）から構成される。
【００４８】
また、図３の（ｅ）に示すように、超３角形データ（実３角形データ又はゼロ３角形データ）は、３角形の３つの頂点データ（座標データ）へのポインタ（ｖ０，ｖ１，ｖ２）、３つの隣接する超３角形データ（実３角形データ又はゼロ３角形データ）へのポインタ（ｔ０，ｔ１，ｔ２）、及び実３角形データ又はゼロ３角形データのどちらであるかを示すフラグｆから構成される。ここで、ポインタとは、記憶装置（メモリ）上において、該当データが格納されている番地（アドレス）を示すデータである。なお、ｆは必ずしも必要ではなく、省略することができるが、本実施の形態では、処理の効率化のためにｆを用いている。
【００４９】
図示を省略しているが、立体データは、実３角形データ及びゼロ3角形データの集合体であり、上記と同様に、これらのデータへのポインタから構成される。交線データは、交線の始点及び終点となる頂点データへのポインタ（ｖ０，ｖ１）と、交線を挟んで隣接する２つの３角形データへのポインタ（ｔ０，ｔ１）とから構成される。
【００５０】
誤差幾何処理部３は、超３角形幾何処理部３１、ユークリッド座標処理部３２及び浮動小数点演算処理部３３を備え、超３角形幾何処理部３１をベースにした３次元幾何モデリングシステム（ソリッドモデラ）であり、ユークリッド座標処理部３２と浮動小数点演算処理部３３とを用いて誤差幾何処理（誤差有り幾何処理）を実行する。
【００５１】
超３角形幾何処理部３１は、誤差幾何データ記憶部２の頂点データ記憶部２２に蓄積された頂点データ（浮動小数点データ）を順次読み出してユークリッド座標処理部３２へ出力する。ユークリッド座標処理部３２は、浮動小数点演算処理部３３を用いて、ユークリッド座標系における座標の変換処理、例えば、頂点座標の移動、回転及びスケーリングの座標変換処理を浮動小数点演算により実行する。超３角形幾何処理部３１は、ユークリッド座標処理部３２による処理結果を再び頂点データ記憶部２２に格納する。
【００５２】
例えば、座標回転変換処理の場合、ユークリッド座標系により表現された頂点データＶ＝（Ｘ，Ｙ，Ｚ）を、その原点を中心にX座標軸回りにθ度回転した頂点データＶ’＝（Ｘ’，Ｙ’，Ｚ’）は、以下の処理（３次元ユークリッド座標処理）により求めることができる。
【００５３】
【数３】
2006323465.tif 000005
【００５４】
ここで、
Ｃ＝ｃｏｓ（θ），Ｓ＝ｓｉｎ（θ）  （１２）
である。このように、座標回転変換処理では、３角関数（無理数）を伴うので、原理的に整数表現はできず、無誤差演算を適用することができないため、誤差演算（浮動小数点演算）が用いられる。すなわち、座標回転変換処理には誤差幾何処理が適している。
【００５５】
無誤差幾何処理部５は、同次超３角形幾何処理部５１、４次元同次座標系幾何処理部５２及び可変長ビット整数演算器５３を備える。無誤差幾何処理部５は、同次超３角形幾何処理部５１をベースにした３次元幾何モデリングシステムであり、４次元同次座標系幾何処理部５２による４次元同次座標系幾何処理及び可変長ビット整数演算器５３による可変長整数演算を用いて幾何処理を無誤差で実行する。この場合、幾何処理の不安定性の問題を根本から解決し、無誤差幾何処理部５において１００％の安定性を確保することができる。
【００５６】
同次超３角形幾何処理部５１は、２つの異なる立体（超３角形データ）に対して形状和、形状差及び形状積の集合演算等を無誤差で実行する。４次元同次座標系幾何処理部５２は、４次元同次座標系での演算処理を行うプリュッカー座標演算器である。可変長ビット整数演算器５３は、加算器、減算器及び乗算器としての機能を有し、加算、減算及び乗算を可変長ビットの整数演算を用いて無誤差で行う。
【００５７】
例えば、同次超３角形幾何処理部５１は、無誤差幾何データ記憶部４の同次超３角形データ記憶部４１に蓄積された同次超３角形データ、及び同次頂点データ記憶部４２に蓄積された同次頂点データ（可変長整数データ）を読み出し、これらのデータに対して４次元同次座標系幾何処理部５２及び可変長ビット整数演算器５３を用いて集合演算処理を行い、その結果を再び無誤差幾何データ記憶部４に格納させる。上記の平面多面体の集合演算処理は、有理数のみで行うことができ、無理数が介在しないため、可変長整数演算ですべてを行うことができ、無誤差幾何処理で行うことができる。なお、この無誤差集合演算処理としては、特許第３１５１７１０号「３次元図形の形状演算装置」に記載されている無誤差演算処理を用いることができるので、詳細な説明を省略する。
【００５８】
精度管理部６は、数値データ切り捨て処理部６１及びデータ変換処理部６２を備え、数値の精度の管理、すなわち、頂点データ（頂点座標値データ）の数値桁数の管理を行うとともに、頂点データの数値のデータ形式を誤差有り形式（浮動小数点フォーマット）と無誤差形式（可変長整数フォーマット）との間で双方向に変換する。
【００５９】
数値データ切り捨て処理部６１は、浮動小数点で表現された頂点データ及び可変長整数で表現された頂点データに対して、要求桁数（要求精度）に応じて、その数値桁数を切り捨てる処理を行う。例えば、１回の無誤差集合演算が行われる度に、頂点座標値データの桁数が（通常）増大するため、数値データ切り捨て処理部６１は、集合演算の度に、予め設定された要求桁数に応じて頂点データ（可変長整数）の下位桁の切り捨てを行う。なお、要求桁数は、上記のように予め設定されたものに特に限定されず、外部システム８からの要求に応じて桁数を設定したり、計算過程において適応的に設定する等の種々の変更が可能である。
【００６０】
ここで、数値の精度の管理について説明する。上記の無誤差幾何処理の欠点の１つは、計算が進むにつれて数値桁数が際限なく増大することである。例えば、複数回の集合演算を無誤差幾何処理で繰り返すと、頂点データの数値桁数が際限なく増大し、この数値桁数の増大は無誤差幾何処理の原理的なものであり、不可避である。しかしながら、幾何処理の実用面を考えると、ある精度以上の計算は必要でない場合がほとんどである。
【００６１】
したがって、本実施の形態では、上記の数値桁数の増大を回避するため、数値データ切り捨て処理部６１を用いて、要求精度に応じて頂点データの数値桁数を切り捨てることにより、無誤差演算処理に桁数制限を導入して精度（誤差）を管理している。
【００６２】
ここで、「誤差演算処理による誤差」と「無誤差演算処理による誤差」とは、まったく別物であることを強調しておく。前者では、絶えず誤差が発生し蓄積されていく。そして、このような状況下、誤差を把握して管理をすることが難しく、誤差管理をすることは不可能であるといっても過言ではない。このように、誤差演算処理による誤差は制御不能であり、「受動的な」誤差である。一方、後者では、誤差が発生する時点は限定的及び選択的であり、頂点の座標値の切り捨て処理時にのみ誤差が発生する。すなわち、誤差が絶えず発生することはなく、また蓄積されていくこともない。この誤差は制御可能であり、「能動的な」誤差である。無誤差幾何処理においても、実用面を考えると、ある精度以上の計算は必要でない場合がほとんどである。
【００６３】
データ変換処理部６２は、ユークリッド座標データ（浮動小数点フォーマット）から同次座標データ（可変長整数フォーマット）への変換処理、及びその逆の同次座標データからユークリッド座標データへ変換処理を実行する。
【００６４】
ユークリッド座標データＶｅ＝（Ｘｅ，Ｙｅ，Ｚｅ）から同次座標データＶｈ＝（Ｘｈ，Ｙｈ，Ｚｈ，ｗｈ）への変換処理は、以下の式を用いて行われる。
【００６５】
（Ｘｈ，Ｙｈ，Ｚｈ，ｗｈ）＝（Ｘｅ，Ｙｅ，Ｚｅ，１）      （１３）
さらに、各座標値に対して、浮動小数点データから整数データへのフォーマット変換処理が行われる。
【００６６】
一方、同次座標データＶｈ＝（Ｘｈ，Ｙｈ，Ｚｈ，ｗｈ）からユークリッド座標データＶｅ＝（Ｘｅ，Ｙｅ，Ｚｅ）への変換処理は、以下の式を用いて行われる。
【００６７】
（Ｘｅ，Ｙｅ，Ｚｅ）＝（Ｘｈ／ｗｈ，Ｙｈ／ｗｈ，Ｚｈ／ｗｈ）      （１４）
さらに、各座標値に対して、整数（分数）データから浮動小数点データへの各座標値のフォーマット変換処理が行われる。
【００６８】
幾何無矛盾化処理部７は、退化３角形処理部７１、重なり３角形処理部７２及び反転境界面処理部７３を備え、数値桁数の切り捨てに伴う頂点データの変動により発生する幾何矛盾をなくす幾何無矛盾化処理を実行する。この幾何無矛盾化処理では、矛盾図形である種々の退化図形を扱うために、多角形をベースとした処理では幾何的組み合わせの数が非常に多くなり（幾何組み合わせの爆発）、処理不可能である。
【００６９】
このため、本実施の形態では、超３角形幾何処理が持つ究極的な単純性等を最大限利用することにより、幾何無矛盾化処理を構築している。すなわち、退化３角形処理部７１、重なり３角形処理部７２及び反転境界面処理部７３による幾何無矛盾化処理は、無誤差幾何処理部５の機能を用いて構築している。
【００７０】
また、幾何無矛盾化処理も無誤差で行われ、１００％の安定性を実現することができるが、幾何無矛盾化処理においても数値桁数が増大する（場合がある）ので、数値データ切り捨て処理部６１により、頂点データの数値の切り捨てが行われ、この切り捨てによる幾何矛盾を除去するため、頂点データの数値の切り捨て後に、幾何無矛盾化処理を再度実行する。これらの処理は、幾何矛盾がなくなるまで、すなわち数値桁数の増大がなくなるまで繰り返される。さらに、誤差幾何処理部３及びデータ変換処理部６２においても、その誤差等により幾何矛盾が発生する（場合がある）ので、これらの処理の後に、幾何無矛盾化処理を実行する。
【００７１】
ここで、頂点データの変動により発生する幾何矛盾について詳細に説明する。本実施の形態では、立体の境界面（超３角形ＢＲｅｐ）は、一又は複数の３角形（実３角形及びゼロ３角形）のみで構成され、上記の数値の切り捨て、浮動小数点演算誤差、及びデータ変換（浮動小数点／整数変換）により、頂点データの数値が変動し、頂点の位置が動く。この頂点の移動により、３角形自体の形の変化及び３角形相互の相対位置の変化が発生し、これらの変化により、以下に説明する幾何矛盾が発生する。
【００７２】
図４は、退化３角形及びその除去処理を説明するための模式図である。まず、３角形自体の形の変化に関しては、図４に示すように、以下の３つのいびつな３角形が発生する可能性がある。このようないびつな３角形を「退化３角形」又は「ゼロ３角形」と呼ぶ。
（１）２頂点が同一点となる３角形
（２）３頂点が同一点となる３角形
（３）３頂点が同一直線上となる３角形
このため、退化３角形処理部７１は、退化３角形面を検出して除去する退化３角形検出除去処理を実行する。具体的には、退化３角形処理部７１は、上記の２頂点が同一となるいびつな３角形、３頂点が同一点となるいびつな３角形、及び３頂点が同一直線上となるいびつな３角形を検出して除去する。なお、超３角形幾何処理では、上記の退化３角形を特段消去する必要も、例外処理する必要もないが、退化３角形を消去すると、データ量（ゼロ３角形数）を削減することができるとともに、不必要なゼロ３角形処理を回避して処理を効率化することができるので、本実施の形態では、退化３角形処理部７１により、以下のようにして退化３角形を検出して除去している。
【００７３】
まず、３角形データ（実３角形データ及びゼロ３角形データ）を無誤差幾何データ記憶部４から順次取り出し、その頂点データｖ０，ｖ１，ｖ２を順次読み込む。次に、その３つの頂点データｖ０，ｖ１，ｖ２に関して同一点判定処理を行う。ｖ０＝ｖ１となる場合は、辺ｖ０ｖ１を挟んで隣接する２つの３角形データ（図４の（４）の例ではｔ０とｔ１）を消去する。これに伴い、図４の（４）に示すように、消去される３角形ｔ０，ｔ１を取り囲む４つの周辺３角形ｔ２，ｔ３，ｔ４，ｔ５の隣接接続情報を変更する。図４の（４）では、ｔ０とｔ１の消去に伴い、ｔ２とｔ３、及びｔ４とｔ５が隣接するようになる。また、ｖ１を頂点に持つすべての３角形データの頂点ｖ１をｖ０とする。図４の（４）では、ｖ１を頂点に持つ３角形面ｔ３，ｔ５，ｔ６の頂点ｖ１をｖ０に変更する。そして、頂点データｖ１を消去する。ｖ０＝ｖ２、ｖ１＝ｖ２となる場合も、上記と同様の処理を行う。以上の処理が、（１）２頂点が同一点となる場合、及び（２）３頂点が同一点となる場合の退化３角形検出除去処理である。
【００７４】
次に、（３）同一頂点を持たない３角形データに対して、その３つの頂点データｖ０，ｖ１，ｖ２の同一直線判定処理を行う。これらの３つの頂点が同一直線上となる場合は、この３角形データをゼロ３角形データとして、同一直線上とならない場合は、この３角形データを実３角形データとして、無誤差幾何データ記憶部４に格納する。以上の処理をすべての３角形データに関して行う。
【００７５】
次に、３角形相互の相対位置の変化に関して、２つの３角形の位置関係をすべて列挙する。図５は、３角形相互の相対位置の変化により発生する２つの３角形の位置関係を説明するための模式図であり、図５に示すように、５通りのみとなる。
（１）離れている（３角形ａ及び３角形ｂ）
（２）交差する（３角形ａ及び３角形ｃ）
（３）線（辺）で接する（３角形ａ及び３角形ｄ）
（４）点（頂点）で接する（３角形ａ及び３角形ｅ）
（５）重なる（同一平面上）（３角形ａ及び３角形ｆ）
上記の（２）、（３）及び（５）の場合は、幾何矛盾が発生する（場合がある）ので、幾何矛盾形状を除去するために、本実施の形態では、以下に説明する重なり面検出除去処理及び反転境界面検出除去処理を行っている。
【００７６】
まず、重なり３角形処理部７２は、重なり３角形面を検出して除去する重なり面検出除去処理を実行する。具体的には、重なり３角形処理部７２は、組にした３角形面データの同一平面判定及び面の向きの判定結果に基づき、３角形面が重なっていると判定した３角形面に対してその重なりを除去する。
【００７７】
図６は、重なり面の一例を示す模式図である。図６の（１）に示す立体は、図６の（２）に示す断面を有し、この立体に対する処理により頂点データが変動すると、図６の（３）に示す断面を有することとなり、境界面に重なる部分（重なる３角形）が発生する。本実施の形態では、重なり３角形処理部７２により、このような重なる３角形を検出して除去する。
【００７８】
図７は、重なり面検出除去処理を説明するための模式図である。例えば、幾何矛盾の１つとして、図７の（８）に示すように、３角形面が重なり、面のしわとなる場合がある。図７の（８）では、形状の断面図を示しており、頂点Ａ，Ｂ，Ｃ，Ｄ，Ｅは、同一平面上にあり、３角形面ｔｉとｔｊとが重なっている。このように面が重なるときは、図７の（８）に矢印で示すように、面の向きは必ず逆となる。
【００７９】
このような重なり３角形データの検出除去処理として、まず、同一平面上となり、且つ面の向きが逆となる２つの３角形データのペアを探索する。このために、２つの実３角形データｔｉ，ｔｊを無誤差幾何データ記憶部４から順次読み出し、同一平面判定及び面の向き判定を行う。両者が同一平面且つ面の向きが逆となる場合が、重なり面処理の対象となる。同一平面とならない場合又は向きが同じとなる場合は、次の実３角形データのペアに処理を進める。
【００８０】
両者が同一平面かつ面の向きが逆となる場合は、両者ｔｉとｔｊとが重なるかどうかの判定を行う。重ならない場合は次の実３角形データのペアに処理を進める。両者が重なる場合は、一方の３角形の頂点により他方の３角形を分割する。このときのパターンは、図７の（１）〜（４）に示すように、４通りある。図７の（１）と（２）のパターンの場合のみが、分割処理の対象となり、３角形ＡＢＣが頂点Ｄにより分割される。また、図７の（２）の場合、不必要な分割をなくすためにゼロ３角形分割を行い、３角形ＡＤＣがゼロ３角形となる。
【００８１】
次に、この分割された３角形が他方の分割される前の３角形の内部にあるかどうかの判定処理を順次行う。判定される３角形の３つの頂点すべてが、もう一方の３角形の内部（辺上を含む）となる場合は、前者の３角形は後者の内部となる（含まれる）。そして、内部となる場合は、この３角形データを消去する。また、判定される３角形の３つの頂点が、他方の内部及び外部の両方となる場合（またがる場合）は、３角形の位相変形を行い、判定される３角形が他方の内部又は外部のどちらかになるようにする。
【００８２】
図７の（５）の例では、分割される前の３角形として、３角形ＡＢＣとＤＥＦとが重なっている。これらが互いに他を分割しあうと、３角形ＡＢＣは、図７の（６）のように分割される。ここで、３角形ＣＤＥとＣＦＤとは、３角形ＤＥＦに対して、内部となる部分と外部となる部分との両方がある。そこで、この２つの３角形が構成する４角形ＣＦＤＥにおいて、その対角線となる辺ＣＤをＥＦと付け替え、新たな３角形ＤＥＦとＣＦＥとを生成する（図７の（７））。これが３角形の位相変形である。これを繰り返すことにより、最終的に、３角形は他方の３角形の内部か外部かのどちらか一方となり、内部及び外部の両方にまたがる場合は、存在しなくなる。
【００８３】
一方、分割された３角形が、他方の分割される前の３角形の外部となる場合は、次の分割された３角形データに処理を進め、以上の処理を、すべての分割された３角形データに関して行う。最後に、消去された３角形に隣接する３角形データを相互に接続する処理（接続情報の更新処理）を行う。以上の処理を、同一平面上且つ面の向きが逆となる実３角形データのすべてのペアにおいて行う。これにより、すべての重なり３角形（面のしわ）を消去することができる。
【００８４】
一方、反転境界面処理部７３は、反転境界面を検出して除去する反転境界面検出除去処理を実行し、同じ立体を構成する面同士が交差している立体を検出して除去する。具体的には、反転境界面処理部７３は、自己干渉立体を分離し、立体の最上位の３角形面を探索し、立体の最近傍上位立体を探索し、最近傍上位立体順に立体をソーティングし、面の向きにより立体を消去する。
【００８５】
図８は、矛盾立体の一例を示す模式図である。図８の（１）に示す立体の頂点データの変動により、図８の（２）に示すように、底面（頂点Ａ）が上面を突き抜けること（交差）が起こり得る。突き抜けた部分（図８の（２）のハッチング部分）は、面の表裏が逆になる。反転境界面とは、このように面の表裏が反転している矛盾境界面である。この境界面を構成する３角形は、上記３角形の位置関係のうち、（２）交差又は（３）線接触のどちらかとなる。反転境界面処理部７３は、図８の（２）に示すように、この自己交差する境界面の交線を求め、図８の（３）に示すように、この交線により境界面を分割分離し、図８の（４）に示すように、反転境界面（矛盾立体）を消去する。
【００８６】
上記の反転境界面の検出除去処理は、自己干渉立体の分離処理、立体の最上位３角形の探索処理、立体の最近傍上位立体の探索処理、最近傍上位立体順に立体データのソーティング、面の向きによる立体の消去処理の順で行われる。
【００８７】
図９は、矛盾立体を説明するための模式図であり、立体の断面図を示しており、ハッチング領域が形状の内部である。図９の（１）では、立体の一部で表裏が反転（逆転）し、反転境界面が発生している。そこで、図９の（２）に示すように、この部分を切り離す処理が分離処理となる。また、図９の（３）では、立体の内部にある穴が外部にはみ出している。そこで、図９の（４）に示すように、このはみ出し部分を分離する。ここで、自己干渉立体とは、図９の（１）、（３）に示すように、同じ立体を構成する面（３角形面）どうしが交差している立体である。自己干渉立体の分離処理では、図９の（２）、（４）に示すように、この交差している面（３角形面）をその交線において分割し、１つの閉じた面（立体）とする処理である。
【００８８】
自己干渉立体の分離処理として、まず、２つの実３角形データｔｉ，ｔｊ（ｉ＝１，２，…、ｊ＝１，２，…）を無誤差幾何データ記憶部４から順次取り出し、両者の交差判定処理を行う。交差する場合は、両方の３角形ｔｉ，ｔｊの共通交線ｓｋ（ｋ＝１，２，…）を求めて、この共通交線において両者を分割する。
【００８９】
図９の（５）の例では、交線ＡＢにおいて、３角形ｔｉとｔｊとが交差している。このとき、共通交線ｓｋはＣＤとなる。本実施形態では、重なり３角形検出除去処理において説明したように、不必要な分割をなくすために、ゼロ３角形分割を行う。ここでの分割パターンは、図９の（６）に示すように、２通りとなる。共通交線ＣＤにおいて、その端点Ｃ側は３角形の辺上となり、ゼロ３角形分割が行われ、３角形ＥＣＧはゼロ３角形となる。もう一方の端点Ｄは、３角形面内となり、通常の分割が行われる。
【００９０】
そして、この分割処理において、共通交線と一致する３角形の辺が存在しない場合は、重なり３角形検出除去処理において説明した位相変形を行い、共通交線と一致する３角形の辺を生成する。以上の処理をすべての実３角形データのぺアに関して繰り返す。
【００９１】
次に、この交線ｓｋを挟んで隣接する３角形の隣接情報を変更する。この処理をすべての交線データｓｋに関して行う。これにより、自己干渉立体を分離することができる。図１０及び図１１は、自己干渉立体の分離処理において求めた共通交線ｓｋ近傍の面の交差パターンを示す模式図である。これらは立体の断面図であり、黒点は共通交線を示し、ハッチングがある側が立体の内部である。
【００９２】
図１０の（１）では、面（３角形面）ｔａとｔｂとが完全に交差している。この場合は当然両者の面の接続関係を共通交線において切り替える。図１０の（２）の場合は、両者の面が形状の内側（内部）において接している場合である。この場合も、接続関係を切り替える。図１０の（３）の場合は、両者の面が形状の外側（外部）において接している場合である。この場合は、接続関係は切り替えず、そのままとする。図１０の（４）は、両者の面が接し、且つ面の向きが同じとなる場合である。この場合も、接続関係は切り替えない。
【００９３】
図１１の（１）、（２）は、面（３角形面）ｔａとｔｂとにおいて、同一平面となる部分がある場合である。このような場合は、面ｔａが面ｔｂに対して内部となる場合のみ、接続関係を切り替える。したがって、図１１の（１）の場合にのみ切り替え、図１１の（２）の場合は、面ｔａが面ｔｂに対して外部となるので、接続関係は切り替えない。ここでは、内部となる場合を切り替えるとしたが、この基準をまったく逆にして、外部となる場合を切り替えるとしても何ら問題はない。また、図１１の（１）、（２）では、同一平面となる部分の面の向きが同じとなる場合を図示しているが、面の向きが逆となる場合も勿論存在する。しかし、このような場合は、重なり３角形の検出除去処理（同一平面且つ面の向きが逆）において、検出及び除去されるので、ここでは対象外となる。
【００９４】
次に、最上位３角形の探索処理について説明する。最上位３角形とは、１つの立体（１つの閉じた境界面）において、その立体を構成する３角形の中で、Ｚ座標値が最大となる頂点を持ち、且つ上面が存在しない３角形である。４次元同次座標系において、頂点Ｖａ＝（Ｘａ，Ｙａ，Ｚａ，ｗａ）のＺ座標値がＶｂ＝（Ｘｂ，Ｙｂ，Ｚｂ，ｗｂ）より大きいとは、以下の式（１５）が成り立つことである。
Ｚａｗｂ＞Ｚｂｗａ  （ｗａ，ｗｂ＞０）  （１５）
また、３角形Ｆ０１２が３角形Ｆ３４５に対して（Ｚ座標軸に関して）上面になるとは、この２つの３角形Ｆ０１２とＦ３４５とがＺ座標軸方向からみて重なり、且つ３角形Ｆ０１２の３つの頂点Ｖ０＝（Ｘ０，Ｙ０，Ｚ０，ｗ０）、Ｖ１＝（Ｘ１，Ｙ１，Ｚ１，ｗ１）及びＶ２＝（Ｘ２，Ｙ２，Ｚ２，ｗ２）において、以下の式（１６ａ）又は（１６ｂ）が成り立つことである。ただし、３角形Ｆ０１２とＦ３４５は交差しないとする。
（０＜ｓ０）∨（０＜ｓ１）∨（０＜ｓ２）  （０＜Ｃ３４５）  （１６ａ）
（ｓ０＜０）∨（ｓ１＜０）∨（ｓ２＜０）  （Ｃ３４５＜０）  （１６ｂ）
ここで、ｓ０等は、下式で与えられる。
ｓ０＝Ｖ０Ｆ３４５＝Ｘ０Ａ３４５＋Ｙ０Ｂ３４５＋Ｚ０Ｃ３４５＋ｗ０Ｄ３４５  （１７ａ）
ｓ１＝Ｖ１Ｆ３４５＝Ｘ１Ａ３４５＋Ｙ１Ｂ３４５＋Ｚ１Ｃ３４５＋ｗ１Ｄ３４５  （１７ｂ）
ｓ２＝Ｖ２Ｆ３４５＝Ｘ２Ａ３４５＋Ｙ２Ｂ３４５＋Ｚ２Ｃ３４５＋ｗ２Ｄ３４５  （１７ｃ）
さらに、２つの３角形が、Ｚ座標軸方向からみて、重なるかどうかの判定処理に関して説明する。４次元同次座標系（Ｘ，Ｙ，Ｚ，ｗ）において、Ｚ座標を無視した３次元同次座標系（Ｘ，Ｙ，ｗ）を想定する。この座標系における３角形の重なり判定処理に帰着することができる。この処理は、３角形の頂点と、方向を持った辺との位置関係判定処理（判定処理）に帰着する。
【００９５】
次に、最上位３角形を求める処理について説明する。まず、最上位頂点Ｖｍａｘに適当な初期値（例えば、存在する頂点データ）を代入する。次に、無誤差幾何データ記憶部４から、処理対象となる１つの立体を構成する実３角形データを順次読み出し、さらにその実３角形を構成する３つの頂点データｖ０，ｖ１，ｖ２を読み出して比較し、Ｚ座標値が最大となる頂点データＶを求める。
【００９６】
次に、この頂点データＶと最上位頂点データＶｍａｘのＺ座標値を比較し、Ｖが大きい場合は、Ｖｍａｘ＝Ｖとする。以上の処理を、処理対象立体のすべての実３角形データに関して行う。以上の処理により、処理対象立体において、Ｚ座標値が最大となる最上位頂点Ｖｍａｘが求まる。
【００９７】
次に、最上位３角形Ｔｍａｘと基準３角形Ｔｂａｓｅに適当な初期値を代入する。例えば、処理対象立体において、最上位頂点Ｖｍａｘを頂点に持つ適当な実３角形データを両者に代入する。そして、処理対象立体において、この最上位頂点Ｖｍａｘを頂点に持つ実３角形データｔｉを無誤差幾何データ記憶部４から順次取り出す。
【００９８】
次に、この３角形ｔｉとＴｂａｓｅとがＺ座標軸方向からみて重なるかどうかの判定を行う。重なる場合は、この３角形ｔｉとＴｍａｘとがＺ座標軸方向からみて重なるかどうかの判定を行う。重なる場合は、３角形ｔｉとＴｍａｘとの位置関係をチェックする。３角形ｔｉがＴｍａｘの上面となる場合（Ｔｍａｘ＜ｔｉ）は、Ｔｍａｘ＝ｔｉとする。以上の処理をすべての実３角形データｔｉに関して行う。これにより、最上位３角形Ｔｍａｘが求まる。
【００９９】
次に、最近傍上位立体について説明する。図１２は、最近傍上位立体を説明するための模式図である。ある立体ｂｉの最近傍上位立体ｂｎｅａｒとは、以下の条件を満たす立体のことであり（図１２参照）、最近傍上位立体とは、ある立体（１つの閉じた境界面）に、Ｚ座標軸正方向に最も近い立体のことである。
（１）立体ｂｉの最上位頂点Ｖｍａｘ＝（Ｘｍａｘ，Ｙｍａｘ，Ｚｍａｘ，ｗｍａｘ）にＺ座標軸と平行に正方向に立てた半直線と交差又は接する立体。
（２）この交点又は接点をＶｎｅａｒ＝（Ｘｎｅａｒ，Ｙｎｅａｒ，Ｚｎｅａｒ，ｗｎｅａｒ）とすると、Ｖｎｅａｒは、頂点Ｖｍａｘ＝（Ｘｍａｘ，Ｙｍａｘ，Ｚｍａｘ，ｗｍａｘ）に最近傍となる立体。（ここで、Ｖｎｅａｒを最近傍上位点と呼ぶことにする。）
（３）Ｚ座標軸方向から見て、立体ｂｉの最上位３角形Ｔｍａｘと重なる上面Ｔｎｅａｒを持つ立体。
（４）上記上面Ｔｎｅａｒが複数個ある場合は、その中で最も下面となる面を持つ立体。（ここで、下面とは、３角形ｔ２が３角形ｔ３の上面となる場合、逆にｔ３はｔ２に対して下面となる（図１２参照）。また、この最も下面となる面Ｔｎｅａｒを最近傍上位３角形と呼ぶことにする。）
図１２の例では、立体の断面図を示しており、立体ｂ０の最上位頂点はＶｍａｘ＝ｖ０、最上位３角形はＴｍａｘ＝ｔ１である。立体ｂ１は、半直線Ｌと接し、且つ最近傍頂点ｖ１を持つが、Ｔｍａｘと重なる面が存在しない。そこで、立体ｂ１は、立体ｂ０の最近傍上位立体ではない。
【０１００】
一方、立体ｂ２は、半直線Ｌと接し、且つ（立体ｂ１は対象外となるので）最近傍上位点（頂点）ｖ２を持ち、且つ最上位３角形Ｔｍａｘと重なる面ｔ３が存在する。そこで、立体ｂ２が、立体ｂ０の最近傍上位立体となる。ここで、最上位３角形Ｔｍａｘと重なる面はｔ２とｔ３との２つが存在するが、両者を比較すると、ｔ３がｔ２の下面となるので、ｔ３が最近傍上位３角形Ｔｎｅａｒとなる。
【０１０１】
次に、最近傍上位立体を求める処理について説明する。ここでは、立体ｂｉの最近傍上位立体ｂｎｅａｒを求める。まず、立体ｂｉの最上位頂点Ｖｍａｘを通るＺ座標軸と平行な直線Ｌを求める。そして、ＴｎｅａｒにＮＵＬＬを設定して初期設定を行う。ＮＵＬＬは「値なし」（該当データなし）を意味する。また、最近傍上位頂点Ｖｎｅａｒには、Ｚ座標値に適当な大きな値、Ｘ、Ｙ、ｗ座標値にＶｍａｘと同じ値を代入することにより初期設定を行う。
【０１０２】
次に、立体ｂｉとは異なる他の立体の実３角形データｔｊを無誤差幾何データ記憶部４から順次読み込む。そして、このｔｊと直線Ｌとの交点Ｖｓが存在するかどうかを判定し、存在する場合はＶｓを求める。交点Ｖｓが存在する場合は、ＶｍａｘとＶｓのＺ座標値を比較する。ＶｓのＺ座標値がＶｍａｘのＺ座標値より小さい場合（Ｖｓ＜Ｖｍａｘ）は、次の実３角形データに処理を移す。逆に、Ｖｍａｘ≦Ｖｓとなる場合は、この３角形ｔｊとＴｍａｘがＺ座標軸方向からみて重なるかどうかの判定処理、及び頂点データを比較してｔｊがＴｍａｘの上面となるかどうか（Ｔｍａｘ≦ｔｊ）の判定処理を行う。
【０１０３】
ｔｊとＴｍａｘとがＺ座標軸方向からみて重なり、且つｔｊがＴｍａｘの上面となる場合（Ｔｍａｘ≦ｔｊ）は、ＶｓとＶｎｅａｒとを比較し、Ｖｎｅａｒ＜Ｖｓとなる場合は、次の実３角形データに処理を移す。Ｖｓ＜Ｖｎｅａｒとなる場合は、Ｖｎｅａｒ＝Ｖｓ、Ｔｎｅａｒ＝ｔｊとする。
【０１０４】
一方、Ｖｓ＝Ｖｎｅａｒとなる場合は、３角形ｔｊとＴｎｅａｒとがＺ座標軸方向からみて重なるかどうかの判定処理、及び頂点データを比較してｔｊがＴｎｅａｒの下面となるかどうか（ｔｊ≦Ｔｎｅａｒ）の判定処理を行う。ｔｊとＴｎｅａｒとがＺ座標軸方向からみて重なり、且つｔｊがＴｎｅａｒの下面となる場合（ｔｊ≦Ｔｎｅａｒ）は、Ｖｎｅａｒ＝Ｖｓ、Ｔｎｅａｒ＝ｔｊとする。
【０１０５】
以上の処理を、立体ｂｉ以外のすべての実３角形データに関して行う。以上の処理により、最近傍上位頂点Ｖｎｅａｒ、最近傍上位３角形Ｔｎｅａｒが求まる。そして、立体ｂｉの最近傍上位立体ｂｎｅａｒ＝Ｔｎｅａｒが属する立体として求まる。
【０１０６】
次に、最近傍上位立体順に立体データをソーティングする処理について説明する。最近傍上位立体順に立体データｂｉをソーティング処理するとは、立体データ（幾何図形データの集合体（実３角形データ又はゼロ３角形データの集合体））ｂｉとｂｊ（ｉ＜ｊ）において、ｂｉの最近傍上位立体ｂｎｅａｒがｂｊとなる場合は、両者のデータの順番を入れ替えることである。ここでは、ｂｉがｂｊよりもデータの先頭にある（ｉ＜ｊ）ので、ｂｉとｂｊとのデータ順を入れ替え、ｂｊがｂｉよりもデータの先頭となるようにする。この処理により、ある立体ｂｉの最近傍上位立体データｂｎｅａｒは、必ず立体データｂｉよりも上位となる（先頭となる）。図１２の例では、立体データの順番は上位から、ｂ３、ｂ２、ｂ１、ｂ０の順番となる。
【０１０７】
次に、面の向きによる立体の消去処理について説明する。面の向きによる立体の消去処理とは、ある立体の面の表裏が最近傍上位立体との関係で矛盾する場合は、この矛盾する立体データの消去を行う処理である。
【０１０８】
図１３は、面の向きと矛盾立体との関係を説明するための模式図である。図１３は、立体の断面図を表しており、ハッチングのある側が立体（形状）の内部、ハッチングのない側が立体の外部を表現している。言い換えれば、矢印の向きが立体の内部を表している。
【０１０９】
図１３の（１）、（２）の場合は、立体Ａにおいて、最近傍上位立体がない場合である。このような場合は、立体Ａの最上位面（最上位３角形）のＺ軸方向の向きを用いて判定を行う。図１３では、立体Ａにおける矢印はすべて、立体Ａの最上位３角形（面）のＺ軸方向の向きを表している。
【０１１０】
図１３の（１）では、立体Ａの最上位３角形のＺ軸方向の向きはマイナスとなっている。このような場合は、立体Ａは矛盾立体ではないので、消去されない。一方、図１３の（２）では、立体Ａの最上位３角形のＺ軸方向の向きはプラスとなっている。このような場合は、立体Ａは矛盾立体となる（境界面の裏表が反転し空間全体に立体の内部が広がっている）ので、消去される。
【０１１１】
図１３の（３）〜（６）の場合は、立体Ａの最近傍上位立体が存在する場合である。ここでは、立体Ｂが立体Ａの最近傍上位立体となる。また、立体Ｂにおける矢印はすべて、立体Ａに対する最近傍上位３角形（面）のＺ軸方向の向きを表している。図１３の（３）〜（６）の場合は、立体Ａの最上位３角形と、立体Ａに対する（立体Ｂに属する）最近傍上位３角形のＺ軸方向における向きの組み合わせをチェックする。図１３の（３）、（６）に示すように、両者のＺ軸方向の向きが逆となる場合は、立体Ａは立体Ｂに対して無矛盾立体となる。そこで、このような場合は、立体Ａは消去されない。一方、図１３の（４）、（５）の場合は、両者のＺ軸方向の向きが同じとなる。境界面Ａは境界面Ｂに対して面の裏表が反転している。このような場合は、立体Ａは立体Ｂに対して矛盾立体となる。そこで、このような場合は、立体Ａは消去される。
【０１１２】
次に、面の向きによる立体の消去処理について具体的に説明する。ここでは、立体データｂｉの幾何矛盾チェックを、データ順に（データの先頭から）行う。まず、初期処理として、すべての立体データの消去フラグをすべてＯＦＦにする。ここで、ＯＦＦは消去しない（無矛盾立体である）ことを意味する。そして、立体ｂ＝ｂｉ（ｉ＝１，２，…）とし、次に、立体ｂの最近傍上位立体ｂｎｅａｒが存在するかをチェックする。
【０１１３】
立体ｂの最近傍上位立体ｂｎｅａｒが存在しない場合は、立体ｂの最上位３角形ＴｍａｘのＺ座標軸方向の向きをチェックする。Ｚ座標軸方向の向きが正の場合は幾何矛盾となるので、立体データｂの消去フラグをＯＮ（消去を意味する）とし、負の場合は幾何矛盾とならないので、立体データｂの消去フラグをＯＦＦのままとする。ここでの処理は、図１３の（１）、（２）の場合に対応している。
【０１１４】
一方、立体ｂの最近傍上位立体ｂｎｅａｒが存在する場合は、ｂｎｅａｒの消去フラグがＯＮかＯＦＦかのチェックを行う。消去フラグがＯＮの場合は、この最近傍上位立体ｂｎｅａｒは矛盾立体であり消去されるので、さらに上位（データの先頭側）の消去フラグがＯＦＦとなっている無矛盾立体である最近傍上位立体を探す。
【０１１５】
消去フラグがＯＦＦとなっている最近傍上位立体ｂｎｅａｒが存在する場合は、このｂｎｅａｒの最近傍上位３角形Ｔｎｅａｒと、立体ｂの最上位３角形ＴｍａｘのＺ座標軸方向の向きの組み合わせをチェックする。ＴｎｅａｒとＴｍａｘのＺ座標軸方向の面の向きの組み合わせが同じとなる場合は（図１３の（４）、（５）の場合）、立体ｂは矛盾立体となるので、立体ｂの消去フラグをＯＮとする。面の向きの組み合わせが逆となる場合は（図１３の（３）、（６）の場合）、立体ｂは矛盾しないので、消去フラグはＯＦＦのままとする。そして、次の立体に処理を移す。
【０１１６】
以上の処理をすべての立体データｂｉに関して行うことにより、すべての立体の幾何矛盾チェックが完了し、その結果として、消去フラグの値（ＯＮ又はＯＦＦ）が確定する。最後に、消去フラグがＯＮとなっているすべての立体データを無誤差幾何データ記憶部４から消去する。これにより、すべての矛盾立体が消去され、無矛盾立体だけが保存される。上記の幾何無矛盾化処理としては、特願２００４−００４６９０号「３次元幾何データの無矛盾化方法及びそのシステム」に記載される幾何無矛盾化処理を用いることができるので、さらに詳細な説明は省略する。
【０１１７】
本実施の形態では、誤差幾何データ記憶部２が誤差記憶手段の一例に相当し、無誤差幾何データ記憶部４が無誤差記憶手段の一例に相当し、誤差幾何処理部３が誤差演算手段の一例に相当し、データ変換処理部６２が変換手段の一例に相当し、幾何無矛盾化処理部７、４次元同次座標系幾何処理部５２及び可変長ビット整数演算器５３が除去手段の一例に相当する。また、無誤差幾何処理部５が無誤差演算手段の一例に相当し、数値データ切り捨て処理部６１が切り捨て手段の一例に相当し、退化３角形処理部７１が退化３角形検出除去手段の一例に相当し、重なり３角形処理部７２が重なり面検出除去手段の一例に相当し、反転境界面処理部７３が反転境界面検出除去手段の一例に相当する。
【０１１８】
次に、上記のように構成された幾何図形データ処理装置による幾何図形データ処理について説明する。図１４は、図１に示す幾何図形データ処理装置による幾何図形データ処理を説明するためのフローチャートである。
【０１１９】
図１４に示すように、まず、ステップＳ１１において、外部インターフェース部１は、外部システム８から出力される幾何図形データを読み込み、誤差幾何（浮動小数点）データの場合は、誤差幾何データ記憶部２に記憶させ、無誤差幾何（整数）データの場合は、無誤差幾何データ記憶部４に記憶させる。
【０１２０】
次に、ステップＳ１２において、数値データ切り捨て処理部６１は、幾何図形データが誤差幾何データの場合は、誤差幾何データ記憶部２の頂点データ記憶部２２から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、頂点データ記憶部２２に再び格納し、幾何図形データが無誤差幾何データの場合は、無誤差幾何データ記憶部４の同次頂点データ記憶部４２から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、同次頂点データ記憶部４２に再び格納する。
【０１２１】
次に、ステップＳ１３において、外部インターフェース部１は、外部システム８からの指示に応じて、入力された幾何データに対して無誤差幾何処理を行うか又は誤差幾何処理を行うか、若しくは幾何図形データ処理が終了したかを判断し、無誤差幾何処理を行う場合はステップＳ１４へ処理を移行し、誤差幾何処理を行う場合はステップＳ２４へ処理を移行し、幾何図形データ処理を終了する場合はステップＳ２８へ処理を移行する。
【０１２２】
無誤差幾何処理を行う場合、ステップＳ１４において、無誤差幾何処理部５は、無誤差幾何データ記憶部４に無誤差幾何データが存在するか否かをチェックし、無誤差幾何データが存在しない場合はステップＳ１５へ処理を移行し、無誤差幾何データが存在する場合はステップＳ２０へ処理を移行する。
【０１２３】
無誤差幾何データが存在しない場合、ステップＳ１５において、データ変換処理部６２は、誤差幾何データ記憶部２から誤差幾何データを順次読み出し、ユークリッド座標から同次座標への変換及び浮動小数点データから整数データへの変換を行い、無誤差幾何データを無誤差幾何データ記憶部４に格納させる。次に、ステップＳ１６において、データ変換処理部６２は、変換した誤差幾何データ（元データ）を誤差幾何データ記憶部２から消去する。
【０１２４】
次に、ステップＳ１７において、幾何無矛盾化処理部７は、上記のデータ変換処理により幾何矛盾が発生している可能性があるので、幾何無矛盾化処理を行う。すなわち、幾何無矛盾化処理部７は、変換された無誤差幾何データを無誤差幾何データ記憶部４から順次読み出し、退化３角形処理部７１、重なり３角形処理部７２及び反転境界面処理部７３による幾何無矛盾化処理を実行し、無矛盾となった無誤差幾何データを無誤差幾何データ記憶部４に再び格納する。
【０１２５】
次に、ステップＳ１８において、数値データ切り捨て処理部６１は、無矛盾となった無誤差幾何データである頂点データの数値桁数が増加したか否かを判断し、頂点データの数値桁数が増加していない場合は、ステップＳ２０へ処理を移行し、頂点データの数値桁数が増加した場合は、ステップＳ１９へ処理を移行する。
【０１２６】
頂点データの数値桁数が増加した場合、ステップＳ１９において、数値データ切り捨て処理部６１は、同次頂点データ記憶部４２から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、同次頂点データ記憶部４２に再び格納し、その後、ステップＳ１７以降の処理を繰り返す。すなわち、幾何無矛盾化処理により頂点データの数値桁数が増大した場合は、数値データ切り捨て処理部６１による頂点データの切り捨て処理（ステップＳ１９）が行われ、この切り捨て処理が行われると、幾何矛盾が発生する場合があるので、幾何無矛盾化処理部７による幾何無矛盾化処理（ステップＳ１７）が再度行われ、頂点データの数値桁数が増大しなくなるまで幾何無矛盾化処理が繰り返される。
【０１２７】
無誤差幾何データが存在する場合（ステップＳ１４でＹＥＳ）又は頂点データの数値桁数が増加していない場合（ステップＳ１８でＮＯ）、ステップＳ２０において、無誤差幾何処理部５は、無矛盾の無誤差幾何データを無誤差幾何データ記憶部４から順次読み出して集合演算等の無誤差幾何処理（可変長整数演算）を無誤差で実行し、その結果としての無誤差幾何データを無誤差幾何データ記憶部４に再び格納する。
【０１２８】
上記の無誤差幾何処理が行われると、頂点データの数値桁数が増大する場合があるので、次に、ステップＳ２１において、数値データ切り捨て処理部６１は、格納された無誤差幾何データである頂点データの数値桁数が増加したか否かを判断し、頂点データの数値桁数が増加していない場合は、ステップＳ１３へ処理を移行して以降の処理を継続し、頂点データの数値桁数が増加した場合は、ステップＳ２２へ処理を移行する。
【０１２９】
頂点データの数値桁数が増加した場合、ステップＳ２２において、数値データ切り捨て処理部６１は、ステップＳ１９と同様に、同次頂点データ記憶部４２から頂点データを順次読み出し、予め設定されている要求桁数に従って頂点データの桁数を切り捨て、同次頂点データ記憶部４２に再び格納する。
【０１３０】
次に、ステップＳ２３において、幾何無矛盾化処理部７は、上記の桁数の切り捨て処理により幾何矛盾が発生している可能性があるので、ステップＳ１７と同様に、幾何無矛盾化処理を行い、その後、頂点データの数値桁数が増大しなくなる（幾何矛盾がなくなる）まで、ステップＳ２１以降の処理を繰り返す。上記のステップＳ１４〜Ｓ２３の処理が、幾何無矛盾化処理等を含む無誤差幾何処理の全体の流れである。
【０１３１】
一方、ステップＳ１３において、誤差幾何処理が選択された場合、以下の誤差幾何処理が実行される。まず、ステップＳ２４において、誤差幾何処理部３は、誤差幾何データ記憶部２に誤差幾何データが存在するか否かをチェックし、誤差幾何データが存在しない場合はステップＳ２５へ処理を移行し、誤差幾何データが存在する場合はステップＳ２７へ処理を移行する。
【０１３２】
誤差幾何データが存在しない場合、ステップＳ２５において、データ変換処理部６２は、無誤差幾何データ記憶部４から無誤差幾何データを順次読み出し、同次座標からユークリッド座標への変換及び整数データから浮動小数点データへの変換を行い、誤差幾何データを誤差幾何データ記憶部２に格納させる。次に、ステップＳ２６において、データ変換処理部６２は、変換した無誤差幾何データ（元データ）を無誤差幾何データ記憶部４から消去する。
【０１３３】
誤差幾何データが存在する場合（ステップＳ２４でＹＥＳ）又はステップＳ２６の処理後、ステップＳ２７において、誤差幾何処理部３は、誤差幾何データを誤差幾何データ記憶部２から順次読み出し、座標変換等の誤差幾何処理（浮動小数点演算）を実行し、その結果としての誤差幾何データを誤差幾何データ記憶部２に再び格納し、その後、ステップＳ１３へ処理を移行して以降の処理を継続する。以上のステップＳ２４〜Ｓ２７が、誤差幾何処理の全体の流れである。
【０１３４】
このように、誤差幾何処理が終了した後、処理がステップＳ１３へ戻され、誤差幾何処理が実行された誤差幾何データは、上記のステップＳ１４〜Ｓ２３の無誤差幾何処理において、無誤差幾何処理をベースにした幾何無矛盾化処理によりその幾何矛盾が除去されるとともに、その桁数が切り捨て処理により必要精度に応じて切り捨てられるので、無誤差幾何データに対して無誤差幾何処理する場合だけでなく、誤差幾何データに対して誤差幾何処理する場合も、幾何矛盾を取り除くことができ、矛盾のない幾何図形データを生成して安定的な処理系を実現することができる。
【０１３５】
なお、誤差幾何処理における幾何無矛盾化処理は、無誤差幾何処理の場合のようにいつでも行われる訳ではなく、適宜行われる。以下、誤差幾何処理における幾何無矛盾化処理の流れに関して説明する。まず、無誤差幾何処理がＮＵＬＬ（何も処理をしない）とセットされた後、ステップＳ１４〜Ｓ２３の無誤差幾何処理が行われる。次に、誤差幾何処理においてもＮＵＬＬとセットされた後、ステップＳ２４〜Ｓ２７の誤差幾何処理が行われる。これにより、誤差幾何処理における幾何無矛盾化処理が完了したことになる。すなわち、幾何矛盾が生じていない誤差（浮動小数点）幾何データが生成されたことになる。ただし、ここでの前提は、ステップＳ２５の無誤差幾何データから誤差幾何データへのデータ変換処理において、変換誤差（桁落ち）が発生しないことである。
【０１３６】
最後に、幾何図形データ処理を終了する場合（ステップＳ２８で終了が選択された場合）、外部インターフェース部１は、演算結果が誤差幾何（浮動小数点）データの場合、誤差幾何データ記憶部２から誤差幾何データを読み出し、演算結果が無誤差幾何（整数）データの場合、無誤差幾何データ記憶部４から無誤差幾何データを読み出し、外部システム８へ転送する。
【０１３７】
上記の処理により、本実施の形態では、誤差演算処理を実行された誤差幾何データを無誤差幾何データへ変換し、変換された無誤差幾何データに対して発生する幾何矛盾を検出して除去しているので、適用できる幾何処理の範囲が非常に広い誤差演算処理を用いることができるとともに、誤差演算処理における誤差により発生する幾何矛盾を、無誤差幾何処理をベースにした幾何無矛盾化処理により取り除くことができ、矛盾のない幾何図形データを生成して安定的な処理系を実現することができる。
【０１３８】
なお、上記の説明では、誤差幾何データに対する切り捨て処理を、無誤差幾何処理の中で行っているが、この例に特に限定されず、誤差幾何処理（ステップＳ２７）の実行後等の誤差幾何処理の中で行い、幾何無矛盾化処理のみを無誤差幾何処理の中で行うようにしてもよい。
【０１３９】
また、本実施の形態では、スタンドアローン型の幾何図形データ処理装置を用いているが、この例に特に限定されず、インターネット等のネットワークを介して接続されるクライアント装置及びサーバ装置から構成するようにしてもよい。
【０１４０】
また、本実施の形態では、４次元同次座標系幾何処理を用いたが、同次座標幾何処理として、他の次元の同次座標幾何処理を用いてもよい。
【図面の簡単な説明】
【０１４１】
【図１】本発明の一実施の形態による幾何図形データ処理装置の構成を示すブロック図である。
【図２】ゼロ３角形及び超３角形幾何処理を説明するための模式図である。
【図３】ユークリッド座標系及び同次座標系の座標データ及び数値データ並びに超３角形データのデータ構成の一例を示す図である。
【図４】退化３角形及びその除去処理を説明するための模式図である。
【図５】３角形相互の相対位置の変化により発生する２つの３角形の位置関係を説明するための模式図である。
【図６】重なり面の一例を示す模式図である。
【図７】重なり面検出除去処理を説明するための模式図である。
【図８】矛盾立体の一例を示す模式図である。
【図９】矛盾立体を説明するための模式図である。
【図１０】自己干渉立体の分離処理において求めた共通交線ｓｋ近傍の面の交差パターンを示す模式図である。
【図１１】自己干渉立体の分離処理において求めた共通交線ｓｋ近傍の面の交差パターンを示す模式図である。
【図１２】最近傍上位立体を説明するための模式図である。
【図１３】面の向きと矛盾立体との関係を説明するための模式図である。
【図１４】図１に示す幾何図形データ処理装置による幾何図形データ処理を説明するためのフローチャートである。
【符号の説明】
【０１４２】
１  外部インターフェース部
２  誤差幾何データ記憶部
３  誤差幾何処理部
４  無誤差幾何データ記憶部
５  無誤差幾何処理部
６  精度管理部
７  幾何無矛盾化処理部
２１  超３角形データ記憶部
２２  頂点データ記憶部
３１  超３角形幾何処理部
３２  ユークリッド座標処理部
３３  浮動小数点演算処理部
４１  同次超３角形データ記憶部
４２  同次頂点データ記憶部
５１  同次超３角形幾何処理部
５２  ４次元同次座標系幾何処理部
５３  可変長ビット整数演算器
６１  数値データ切り捨て処理部
６２  データ変換処理部
７１  退化３角形処理部
７２  重なり３角形処理部
７３  反転境界面処理部
【図１】
2006323465.tif 000006
【図２】
2006323465.tif 000007
【図３】
2006323465.tif 000008
【図４】
2006323465.tif 000009
【図５】
2006323465.tif 000010
【図６】
2006323465.tif 000011
【図７】
2006323465.tif 000012
【図８】
2006323465.tif 000013
【図９】
2006323465.tif 000014
【図１０】
2006323465.tif 000015
【図１１】
2006323465.tif 000016
【図１２】
2006323465.tif 000017
【図１３】
2006323465.tif 000018
【図１４】
2006323465.tif 000019