(57)【特許請求の範囲】
【請求項１】
メモリに記憶されたプログラムに従って中央処理装置によって処理を行なう図形処理装置の内外判定方法であって、
判定したい点が、３次元の面に乗っているかを前記中央処理装置によって判定するステップと、
前記判定したい点が前記３次元の面上において領域の境界を構成する稜線に乗っているかを前記中央処理装置によって判定するステップと、
前記判定したい点を通り、前記領域と交点を持つ切断面を前記中央処理装置によって求めるステップと、
前記切断面と領域の乗っている面との交線を前記中央処理装置によって求めるステップと、
前記切断面と前記領域の境界を構成する稜線の交点を前記中央処理装置によって求めるステップと、
前記交線上に乗っていて、領域外にある点を前記中央処理装置によって求めるステップと、
前記判定したい点と領域外にある点の間にある、前記領域の境界と前記交線との交点の数が偶数か奇数かを前記中央処理装置によって判定するステップとを有する領域内における内外判定方法。
【請求項２】
前記判定したい点が境界を構成する稜線に乗っていれば、境界上にあると前記中央処理装置によって判定するステップとを有する請求項１の領域内における内外判定方法。
【請求項３】
判定したい点及び領域外の点及び切断面と領域の境界を構成する稜線の交点を切断面と領域の乗っている面との交線上において並んでいる順番を前記中央処理装置によって認識するステップとを有する請求項１の領域内における内外判定方法。
【請求項４】
判定したい点が、３次元の面に乗っているかを判定する手段と、
前記判定したい点が前記３次元の面上における領域の境界を構成する稜線に乗っているかを判定する手段と、
前記判定したい点を通り、前記領域と交点を持つ切断面を求める手段と、
前記切断面と領域の乗っている面との交線を求める手段と、
前記切断面と前記領域の境界を構成する稜線の交点を求める手段と、
前記交線上に乗っていて、領域外にある点を求める手段と、
前記判定したい点と領域外にある点の間にある、前記領域の境界と前記交線との交点の数が偶数か奇数かを判定する手段とを有する領域内における内外判定装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は、ＣＡＤ等にｎ次元の領域における点の内外判定方法に関するものである。
【０００２】
【従来の技術】
２次元の平面上における領域内の内外判定としては、領域が多角形の場合、図３のように判定しようとする点と多角形の頂点の列を結ぶベクトルの作る角の総和を求めて、０であれば外部の点、±πであれば内部の点と判定する方法や、図４のように判定したい点から半無限直線を引き、境界を構成しようとする各稜線との交点の個数を数え、偶数なら外部の点、奇数なら内部の点と判定する方法が知られている。
【０００３】
【発明が解決しようとしている課題】
従来、ＣＡＤ等で計算機を使って、２次曲面や自由曲面等を含む３次元の面上の領域において内外判定を行なう時、計算機が厳密な計算を行なえないため、計算機による誤差によって、内外判定の結果が正しく得られないことがあり、安定な内外判定を行なうことが難しく、３次元のＣＡＤのモデリング等において、３次元の領域における一点の内外判定を利用した図形処理が多用されるため、安定的に、３次元の図形処理を行なうことが難しいという問題点があった。
【０００４】
また、３次元の内外判定の場合、２次元の場合と違い、領域の乗っている面の種類、領域の境界を構成する稜線の種類に関わらず、同一の手段で統一的に内外判定行なうことが難しいという課題があった。
【０００５】
【課題を解決するための手段】
メモリに記憶されたプログラムに従って中央処理装置によって処理を行なう図形処理装置の内外判定方法であって、判定したい点が、Ｎ次元の面に乗っているかを前記中央処理装置によって判定するステップと、前記判定したい点が前記Ｎ次元の面上において領域の境界を構成する稜線に乗っているかを前記中央処理装置によって判定するステップと、前記判定したい点を通り、前記領域と交点を持つ切断面を前記中央処理装置によって求めるステップと、前記切断面と領域の乗っている面との交線を前記中央処理装置によって求めるステップと、前記切断面と前記領域の境界を構成する稜線の交点を前記中央処理装置によって求めるステップと、前記交線上に乗っていて、領域外にある点を前記中央処理装置によって求めるステップと、前記判定したい点と領域外にある点の間にある、前記領域の境界と前記交線との交点の数が偶数か奇数かを前記中央処理装置によって判定するものである。
また、判定したい点が、Ｎ次元の面に乗っているかを判定する手段と、前記判定したい点が前記Ｎ次元の面上における領域の境界を構成する稜線に乗っているかを判定する手段と、前記判定したい点を通り、前記領域と交点を持つ切断面を求める手段と、前記切断面と領域の乗っている面との交線を求める手段と、前記切断面と前記領域の境界を構成する稜線の交点を求める手段と、前記交線上に乗っていて、領域外にある点を求める手段と、前記判定したい点と領域外にある点の間にある、前記領域の境界と前記交線との交点の数が偶数か奇数かを判定する手段とを有する領域内における内外判定装置である。
【０００６】
【実施例】
図１は、本発明の実施例の動作の流れを説明するフローチャートである。
【０００７】
図２は、本発明を利用する図形処理装置のブロック図であり、バス１（制御線、データ線およびアドレス線を含む）には、中央処理装置（ＣＰＵ）２、リード・オンリ・メモリ（ＲＯＭ）３、ランダム・アクセス・メモリ（ＲＡＭ）４、入力インターフェース５を介して入力装置６、ＣＲＴインターフェース７を介してＣＲＴ８、外部記憶装置インターフェース９を介して、磁気ディスク、磁気テープ等の外部記憶装置１０が接続されている。ＲＯＭ３に記憶されたプログラムに応じ、ＲＡＭ４を一時記憶装置として種々の処理及び制御、例えば図形入力制御、図形表示、ピック処理、隠面処理、内外判定等を行なう。入力装置６はキーボード、タブレット、マウス等であり、図形データの入力を行なうが、この図形データはホスト・コンピュータから受けてもよい。ＣＲＴ８は必要に応じて複数のビット・マップ・プレーン等を含んでおり図形を表示する。
【０００８】
次に、図１及び図５，図６，図７，図８を参照して本発明の好適な実施例を説明するが、以下に述べる処理及び判断はＣＰＵ２がＲＯＭ３に記憶された図１に示す手順のプログラムに従って行なう。
【０００９】
（領域の定義）
本実施例では、図５のような平面および円筒面、円錐面、球等の２次曲面およびトーラス、Ｂｅｚｉｅｒ曲面、ＮＵＲＢＳ（Ｎｏｎ  Ｕｎｉｆｏｒｍｅｄ  Ｒａｔｉｏｎａｌ  Ｂ−ｓｐｌｉｎｅ）曲面等の自由曲線などの幾何形状を持つ面上にあり、線分および円弧、楕円弧、放射線、双曲線等の２次曲線、Ｂｅｚｉｅｒ曲面、ＮＵＲＢＳ（Ｎｏｎ  Ｕｎｉｆｏｒｍｅｄ  Ｒａｔｉｏｎａｌ  Ｂ−ｓｐｌｉｎｅ）曲線等の幾何形状を持つ稜線からなる境界によって囲まれた領域内に、ある空間上の点がその領域内にあるかどうかを判定するものである。
【００１０】
ここで図６のように境界は稜線の集まりからなる外周ループと内周ループよりなり、外周ループは領域の最外周を表現するループで、内周ループは領域における穴を表現するループである。外周ループは、反時計回りを正方向とし、内周ループは時計回りを正方向とし、その順番に稜線がならんでいるものとする。よって稜線上をループの正方向に進んでいったとき左側に領域の実体があるものとする。
【００１１】
以下に図１の本実施例の流れを示すフローチャートのステップＳ１〜Ｓ１３の順番にしたがって内外判定の処理が図２のブロックの中で実行される説明を行なう。
【００１２】
（Ｓ１：ＯＮ−ＳＵＲＦＡＣＥ判定）
本実施例では、判定する点が領域の乗っている面上にまず乗っているか判定する。判定する点と領域の乗っている面との距離が、定められた長さに関する幾何的許容誤差ε以内だとＯＮ−ＳＵＲＦＡＣＥ、そうでなければＯＦＦ−ＳＵＲＦＡＣＥと判定する。Ｓ２においてＯＦＦ−ＳＵＲＦＡＣＥのときはＳ１３において領域外と判定して処理を終了する。
【００１３】
（Ｓ３：与点が境界上にあるかどうかの判定）
上記の処理の後与点が境界上にあるかどうかを判定をする。判定は境界を構成する各稜線と与点との距離を算出し、いずれかの稜線と与点との距離が定められた長さに関する幾何的許容誤差ε以内にあれば与点は境界上にあると判定され処理を終了する。この処理により計算誤差による微妙な領域外の内外判定のエラーをあらかじめ防ぐことができる。
【００１４】
（Ｓ５：与点を通り領域の境界と確実に交点を持つ切断面の算出）
ここでは、切断面として平面を考える。領域の境界と確実に交点を持つ切断面の算出するため、領域の境界を構成する任意の稜線の中点を算出する。また別の一点を乱数を使って発生させる。与点、任意の稜線の中点、乱数を使った一点が同一直線にならんでいなかったら３点を通る平面を切断面とする。同一直線にならんでいたならばなくなるまで乱数を使って、点を求める。後述するように、内外判定にはここで求めた切断面と領域との交線と境界との交点の数を使うので図７のように微妙な計算誤差により判定結果がわかれるケースがある。ここで乱数を使い切断平面を求めることによって上記のような微妙な位置関係になる確率が低くなる。さらにこの切断平面を求める処理以下を奇数回行ない、多い方の判定結果を採用することにより正しい判定結果を得られる確率が非常に高くなる。
【００１５】
（Ｓ６：切断面と領域の乗っている面との交線の算出）
上記で求めた切断平面と領域の乗っている面との交線Ｃを算出する。
【００１６】
（Ｓ７：切断面と領域の境界との交点を算出）
上記で求めた切断面と境界を構成する各稜線との交点を求めて、境界との交点を算出する。ここで算出された交点は、上記で算出された交線上に乗っている。
【００１７】
（Ｓ８：交線Ｃ上に乗っている領域外の点を算出）
交線Ｃ上に乗っている領域外の点を求める。本実施例では以下のような手順にしたがって求める。
【００１８】
まず上記で求めた切断面と境界との交点のうち任意の一点Ｐ０を取り出す。また、その点ののっている稜線をＥ０とする。ここでＰ０における領域の乗っている面の法線ベクトルをｎ０とする。また点Ｐ０におけるＥ０の接線の単位方向ベクトルで、Ｅ０におけるＥ０の所属しているループの回り向きと同方向のベクトルをＴＥとする。また点Ｐ０における交線Ｃの接線の方向ベクトルで、大きさが定められた長さに関する幾何的許容誤差εよりも十分に小さい大きさｅｐｓｄを持つベクトルをＴＣ１、ＴＣ２とする。（図８参照）ここで、
ｎ１＝ＴＣ１×ＴＥ                              （１）
ｎ２＝ＴＣ２×ＴＥ                              （２）
θ１＝（ｎ０とｎ１のなす角）  （０≦θ１≦π）  （３）
θ２＝（ｎ０とｎ２のなす角）  （０≦θ２≦π）  （４）
ここでθｉ（ｉ＝１，２）＜π／２のときＴＣ＝ＴＣｉとする。このとき、
Ｐｏｕｔ０＝Ｐ０＋ＴＣ                          （５）
とする。またＰｏｕｔ０から交線Ｃに下ろした垂線の足をＰｏｕｔとする。Ｐｏｕｔが求める交線Ｃ上に乗っている領域外の点である。
【００１９】
（Ｓ９：与点、切断面と領域の境界との交点、領域外の点の交線上にならんでいる順番を認識）
与点、切断面と領域の境界との交点、領域外の点の交線上にならんでいる順番にソートする。ソートは以下の方法による。
【００２０】
まず交線Ｃのパラメトリック表現を考える。ここでパラメトリック表現としては、パラメータが交線Ｃの進む方向にしたがって単調に増減する必要がある。このようなパラメータ表現を取ることによりパラメータの大きさ順にならべることによって、交線上にならんでいる順番を得ることができる。ここでパラメータ表現の例としては、直線の場合、
Ｐ＝Ｐ０＋ｔＶ（−∞≦ｔ≦∞）                  （６）
Ｐ０：直線上の任意の一点
Ｖ：直線の方向ベクトル
ｔ：パラメータ
円の場合、
Ｐ＝Ｃ＋ｒ（ｕｃｏｓｔ＋ｖｃｏｓｔ）  （０≦ｔ≦２π）  （７）
Ｃ：円の中心
ｒ：円の半径
ｕ：基準ベクトル１（円と同じ平面上の単位ベクトル）
ｖ：基準ベクトル２（円と同じ平面上の単位ベクトル）
ただしｕ・ｖ＝０
ｔ：パラメータ
楕円の場合
Ｐ＝Ｃ＋ａｃｏｓｔ＋ｂｓｉｎｔ  （０≦ｔ≦２π）  （８）
Ｃ：楕円の中心
ａ：長軸ベクトル
ｂ：短軸ベクトル
ただしａ・ｂ＝０
ｔ：パラメータ
双曲線の場合
Ｐ＝Ｃ＋ａｓｅｃｔ＋ｂｔａｎｔ  （０≦ｔ≦２π）  （９）
Ｃ：基準位置ベクトル
ａ：基準ベクトル１
ｂ：基準ベクトル２
ｔ：パラメータ
放物線の場合
Ｐ＝Ｃ＋ｐ・ｔ＾２ｕ＋２ｐｔｖ  （０≦ｔ≦π）  （１０）
Ｃ：基準位置のベクトル
ｐ：焦点距離
ｕ：基準単位軸方向ベクトル１
ｖ：基準単位軸方向ベクトル２
ｔ：パラメータ
ただしｕ・ｖ＝０
【００２１】
（Ｓ１０：領域の内外判定）
上記で認識した点の順番にそって、与点と領域外の点Ｐｏｕｔとの間の領域の交点の数をカウントする。その交点の数に応じて
奇数ならば  領域内
偶数ならば  領域外
と判定する。
【００２２】
（他の実施例）
領域ののっている面の種類、境界を構成する稜線の種類を変更しても同様の方法で、内外判定を行なえる。
【００２３】
【発明の効果】
以上説明したように、３次元上の領域における一点の内外判定を行なうことにより３次元のＣＡＤのモデリング等における、３次元の領域における一点の内外判定を利用した図形処理を安定的に行なうことができるという効果がある。
【図面の簡単な説明】
【図１】本発明の好適な一実施例を示す流れ図。
【図２】図に示す制御手段が実行されるブロック図。
【図３】本発明を説明する図。
【図４】本発明を説明する図。
【図５】本発明を説明する図。
【図６】本発明を説明する図。
【図７】本発明を説明する図。
【図８】本発明を説明する図。
【符号の説明】
１  バス
２  中央処理装置
【図１】
0004095120.tif 000002
【図２】
0004095120.tif 000003
【図３】
0004095120.tif 000004
【図４】
0004095120.tif 000005
【図５】
0004095120.tif 000006
【図６】
0004095120.tif 000007
【図７】
0004095120.tif 000008
【図８】
0004095120.tif 000009