| 【発明の名称】 |
内外点判定アルゴリズム |
| 【発明者】 |
【氏名】新庄 克彦 【住所又は居所】東京都大田区下丸子3丁目30番2号キヤノン株式会社内
|
| 【要約】 |
【課題】
【解決手段】 |
【特許請求の範囲】
【請求項1】 多角形Aの頂点の座標列と或る点Pの座標が与えられたとき、第1に多角形Aの頂点のうちに点Pと一致するものが存在する場合は、該点Pは多角形の頂点上にあるとし、第2に点Pが多角形の頂点上にない場合で、該多角形の何れかの辺上に点Pを含む場合は、該点Pは多角形の辺上にあるとし、第3に点Pが多角形の頂点上にも辺上にも存在しない場合、点Pから或る方向に半直線PXを引き、初期値0の内外判定数Nを考え、多角形Aの全ての辺に対して辺と半直線PXが共有点を持たない場合はNの増減は0とし、半直線PXと交差するとNに1を加え、多角形Aの或る辺の始点及び終点の両方が半直線PX上にある場合は、Nの増減は0、多角形Aの或る辺の始点或は終点の何れか一方が半直線PX上にある場合は、始点或は終点が半直線PX上にある辺を、該始点或は終点方向に延長した線分が一方向きに半直線PXと交差するとNに0.5を加え、他方向きに半直線PXと交差するとNに0.5を減じる演算を行い、最終的にNが偶数ならば、点Pは多角形Aの外点であり、Nが奇数ならば、点Pは多角形Aの内点であるとすることを特徴とする内外点判定アルゴリズム。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、計算機を利用した様々な応用分野、例えば数値シミュレーションの分野やグラフィックの基本ツール群としてグラフィック描画装置に応用することができる内外点判定アルゴリズムに関する。 【0002】 【従来の技術】平面上に与えられた点が同一平面上の閉曲線の内に存在するか否かという問題は、数学的興味から古くから研究されてきた。現在では基本群と呼ばれるトポロジーの言葉で最も厳密且つ抽象的に表現することが可能であるが、留数の定理に関連する解析的な問題でもある。 【0003】与えられた平面に自然な複素座標を導入することによって平面を複素平面と見なし、与えられた閉曲線をΓとし、与えられた点をz0 とすると、関数f(z)=1/(z−z0 )として次の一周積分: を計算することによって、与えられた点が平曲線の内点か否かを判定することができる。つまり、留数の定理によると、この積分の値が零であれば、z0 は曲線の外に存在し、零でなければ、即ち±2πiであれば、点は閉曲線内の点であることが判明する。 【0004】デュドネ編「数学史1700-1900 I」(波書店1985年発行)によると、留数の定理を発見したのはコーシーのようである。1826年のSur un nouveau genre de calcul infinitesmal という題の論文(Exercices de mathematiques)において、特異点の周りの無限小解析を行うことにより留数の定理を発見したとある。コーシーは、その後、長方形の周りでの複素函数の積分がその内部の留数の総和であることを計算し、その後20年に亘ってこの問題に深く関わったとある。この留数の計算をもって幾何学と函数論とが結び付いたと言っても過言ではない。つまり、解析的な関数の値の和(積分)によって純粋に幾何学的な事実が判明するのである。 【0005】実際の計算においては、閉曲線は任意のものではなく、区分的に直線で表されたものがより実用的に重要である。つまり、多角形と点Pが与えられた際に点Pが多角形の内部にあるか否かの判定をする場合が多い。 【0006】このような与えられた点が図形の内点か否かを判定する必要性は計算機の性能の発達と共に、近年、非常に増加していると考えられる。近年のグラフィック描画装置或はそれに関する基本的な問題においては、マウス等で指示した点が与えられた図形の内点か否かという判定を必要とする。又、モンテカルロ法等の数値計算においては、多数の点が1つの多角形の内点か否かを判断することが求められる。 【0007】上述の留数の定理に従った内外判定アルゴリズムは、多角形の各辺の終端の点Pから臨む角度を計算し、その角度の総和が±2πであるか否かを調べる必要がある。 【0008】しかしながら、角度の計算は超越関数である逆3角関数を使うため、計算時間を多く必要とするものである。 【0009】特許第2595361号に記載の「折線から成る図形の内外判定方法」においては、上述の留数の定理に沿った内外判定を多くの場合使わないで内外判定を行う方法が提案されている。この発明は、上述の留数の定理を利用したものとx−y座標の特徴を利用した外接する長方形での内外判定を組み合わせたものである。計算時間を多く必要な留数の定理を利用した内外判定の問題点を避けるために図11に示すようなフローチャートに従ったアルゴリズムが特許第2595361号に記載の「折線から成る図形の内外判定方法」では提供されている。 【0010】図9に示すように、多角形Aと点Pが与えられたとき、多角形Aを内包する長方形Dを多角形Aの座標のx軸、y軸の最大値と最小値を利用して形成する。図11に示すフローチャートにおいては、先ず始めに図形の埋め込まれたxy座標のx、y軸のそれぞれの最大値と最小値によって形成される長方形に関して、予め大小判定による内外判定を行い、その後、長方形の内であるとした場合は、長方形内の点に対する多角形の内外判定を行うこととなっている。 【0011】又、Postscriptリフアレンスマニュアル 第2版Adobe Systems 著:アドビシステムズジャパン監訳、アスキー出版: 1991 には、ワインディング規則及び奇偶規則による内点判定法が記載されている。ワインディング規則は、判定しようとする点から或る方向に伸びる半直線を引く。0から数え始めて、1つの方向に多角形の辺がこの半直線と交差する毎に1を加える。そして、逆方向に多角形の辺が半直線と交差する毎に1を引く。全ての交差をカウントした後、結果が0の場合には、その点は多角形の外側である。結果が0以外の場合には、その点は多角形の内側である。 【0012】図12に示すように、奇偶規則では、単に半直線と交差する多角形の辺の数をカウントすることによりその点が内部か否か判断する。この数が奇数である場合には、点は内側にある。この数が偶数である場合には、点は外側にあるとする。 【0013】 【発明が解決使用とする課題】従来の技術である特許第2595361号に記載された発明においては、一般の多角形に対する内点判定は計算時間を非常に必要とするため、多角形を埋め込んだ長方形に対する予備的内点判定を行っていた後に、もしも目的とする点が長方形外に存在した場合は、該点が多角形の外部に存在していると判定し、又、逆に長方形の内部に存在した場合は、計算時間の掛かる多角形と点に対する内外判定を行っていた。 【0014】しかしながら、図10に示したような多角形Aがxy軸に対して斜めの方向に延びている場合、対応するx軸とy軸の最大値と最小値から形成される長方形は広い面積を持つ。そのため、図11のフローチャートに沿った予備的な内点判定を行う長方形の面積が本来求めたい多角形の面積に比較して非常に大きくなり、ランダムな点分布を考えた場合、予備的内点判定が十分機能していないこととなる。つまり、予備的な内点判定を行っても、次の詳細な内点判定の計算を非常に多くの場合、行う必要が生じて高速化を図ることができない。 【0015】又、ワインディング規則や奇偶規則においては、多角形の辺が半直線と一致する場合やその半直線に接する場合にどうすべきかを指定しない。任意の半直線を使用できることから、単にそのような問題のある交差に出会わない別の直線を選ぶことにしているのみである。従って、或る多角形に対して、多数の判定すべき点を有する問題に関しては、判定点によっては何度も半直線を取り直す必要が生じる可能性が高い。 【0016】本発明は上記問題に鑑みてなされたもので、その目的とする処は、折線閉多角形と或る点が与えられたとき、判定点と閉多角形の位置関係に拘らず、判定点が閉多角形内にあるか否かを判定することができる内外点判定アルゴリズムを提供することにある。 【0017】 【課題を解決するための手段】上記目的を達成するため、本発明は、多角形Aの頂点の座標列と或る点Pの座標が与えられたとき、第1に多角形Aの頂点のうちに点Pと一致するものが存在する場合は、該点Pは多角形の頂点上にあるとし、第2に点Pが多角形の頂点上にない場合で、該多角形の何れかの辺上に点Pを含む場合は、該点Pは多角形の辺上にあるとし、第3に点Pが多角形の頂点上にも辺上にも存在しない場合、点Pから或る方向に半直線PXを引き、初期値0の内外判定数Nを考え、多角形Aの全ての辺に対して辺と半直線PXが共有点を持たない場合はNの増減は0とし、半直線PXと交差するとNに1を加え、多角形Aの或る辺の始点及び終点の両方が半直線PX上にある場合は、Nの増減は0、多角形Aの或る辺の始点或は終点の何れか一方が半直線PX上にある場合は、始点或は終点が半直線PX上にある辺を、該始点或は終点方向に延長した線分が一方向きに半直線PXと交差するとNに0.5を加え、他方向きに半直線PXと交差するとNに0.5を減じる演算を行い、最終的にNが偶数ならば、点Pは多角形Aの外点であり、Nが奇数ならば、点Pは多角形Aの内点であるとすることを特徴とする。 【0018】 【発明の実施の形態】以下に本発明の実施の形態を添付図面に基づいて説明する。 【0019】図1に本発明の内外点判定アルゴリズムの概要を示す。 【0020】多角形Aと判定点Pを考え、Ai Ai+1 を多角形Aの辺の1つとする。図1(a)に示すように、Ai 或はAi+1 が点Pと一致する場合は、該点Pは多角形Aの頂点上にある。 【0021】次に、図1(b)に示すように、Ai 或はAi+1 は点Pと一致しないが、線分Ai Ai+1 上に点Pがある場合は、該点Pは多角形Aの辺上にある。更に、点Pが多角形Aの頂点上にも辺上にも存在しない場合、内外判定数Nを考える。多角形Aの全ての辺に対して、その辺の始点及び終点を考慮し、或る辺の終点が次に続く辺の始点となると考える。即ち、各辺を向きを持った線分と考える。 【0022】更に、点Pからある半直線PXを引き、多角形の全ての辺に対応する向きを持った線分と半直線PXとの位置関係によって、内外判定数Nを初期値0から増減させ、最終的にNが0ならば、点Pは外点、Nが0でなければ内点とする。 【0023】Nの増減の仕方を図1(c)に示す。即ち、図中、A1 A2 、A3 A4 、A5A6 のように辺が半直線PXと共有点を持たない場合は、Nの増減は0、A7 A8 、A9 A10のように線分と半直線が交差するときはNに1を加える。A11A12のように向き付き線分の始点及び終点の両方が半直線PX上にある場合は、Nの増減は0、更に線分の始点或は終点の一方のみが半直線上にある場合、半直線PXを下から上に横切る場合を正の方向と仮定した場合、A13A14、A15A16のように向き付き線分の始点或は終点の一方が半直線PX上にあり、該向き付き線分と半直線PXの交差方向が正の向きである場合はNに0.5を加え、逆にA17A18、A19A20のように向き付き線分の始点或は終点の一方が半直線PX上にあり、該向き付き線分と半直線PXの交差方向が負の向きである場合はNから0.5を減ずる。 【0024】以上の操作を多角形Aの全ての辺に対応する向き付けされた線分に対して行えば良い。尚、ここでは、辺が半直線PXを下から上に横切る場合に正の方向としたが、逆にこの交差方向を負の方向としても、内外判定に影響しないことは明らかである。図2に上述のアルゴリズムをフローチャートにて示す。 【0025】以上説明した方法によって、或る多角形Aに対してどのような判定点P、半直線PXを考えても、半直線PXを選び直すことなく必ずPの内外判定を行うことができる。 【0026】[実施例1]図3に実施例1を示す。三角形ABCの各頂点の座標がA(1,3)、B(2,1)、C(3,2)であるとき、点P(1,1)) が三角形の内点であるか否かを判定する。 【0027】点Pを原点とする座標系では三角形ABCの各頂点の座標はA(0,2)、B(1,0)、C(2,1)となる。点Pを原点とする座標系のx軸の正の部分を判定に用いる半直線と考え、三角形ABCの各辺が交差するか否かを調べる。尚、始点或は終点の一方のみが半直線上にある場合のNの増減の符号を決定するための方向付けは、上向きの交差をプラス、下向きの交差をマイナスとした。 【0028】先ず、内外半定数Nを0とする。辺ABについて、頂点Aのy座標は正であり、頂点Bのx座標は正、y座標は0、従って、辺ABのx軸の正の部分との交差は−0.5であるため、Nの値を0.5減ずる。辺BCについて、頂点Cのy座標は正であり、頂点Bはx軸上の正の領域にあるため、辺BCのx軸の正の部分との交差は+0.5であり、Nの値に0.5を加える。 【0029】辺CAについて、頂点Cと頂点Aのy座標は共に正であるため、辺CAのx軸の正の部分との交差は0であり、Nの増減はない。最終的にNの値は0で偶数となる。従って、点Pは三角形ABCの外側にあると判定される。 【0030】[実施例2]図4は実施例2を示す。三角形ABCの各頂点の座標がA(1,3)、B(2,1)、C(2,2)であるとき、点P(2,3)が三角形の内点であるか否かを判定する。 【0031】点Pを原点とする座標系では三角形ABCの各頂点の座標はA(−1,0)、B(0,−2)、C(0,−1)となる。点Pを原点とする座標系のy軸の負の部分を判定に用いる半直線とし、三角形ABCの各辺が交差するか否かを調べる。尚、始点或は終点の一方のみが半直線上にある場合のNの増減の符号を決定するための方向付けは、右向きの交差をプラス、左向きの交差をマイナスとした。 【0032】先ず、内外判定数Nの初期値を0とする。ABについて、頂点Aのx座標は負であり、頂点Bのx座標は0、y座標は負、即ち、頂点Bはy軸上の負の領域にある。従って、辺BCとy軸の負の部分との交差は正方向であり、Nの値に0.5を加える。辺BCについて、頂点Cのx座標は0、y座標は負、即ち、頂点Bと頂点Cは共にy軸上の負の領域にある。従って、辺BCとy軸の負の部分との交差はなく、Nの増減はない。辺CAについて、頂点Cはy軸上の負の領域にあり、頂点Aのx座標は負であるため、辺CAとy軸の負の部分との交差は負方向であり、Nの値を0.5減ずる。 【0033】以上の結果から最終的にNの値は0、つまり偶数であるため、点Pは三角形ABCの外側にあると判定される。 【0034】[実施例3]図5は実施例3を示す。本実施例では、22角形を考える。 【0035】今、判定点Pを原点、及び判定に用いる半直線をx軸正の方向とする座標系で考える。図5中、22角形の22本の辺上には点Pは存在しないため、半直線PXと各辺との位置関係から内外半定数Nを計算することになる。具体的には、各頂点Ai x、y座標値、及び各線分と半直線PXとの交点が存在する場合はそのx座標値を求めることによりNの増減を決定するが、ここでは、その計算の過程は説明しない。今、半直線PXを下から交差する場合を正の向きとすると、各辺に対応するNの増減は次の通りとなる。 【0036】即ち、A1 A2 、A2 A3 、A3 A4 、A4 A5 、A5 A6 、A8 A9 、A10A11、A13A14、A15A16、A17A18、A19A20、A22A1 ではNの増減は0、A6 A7 、A11A12、AA16A17、A21A22ではNの値は1増加し、A14A15、A18A19ではNの値は0.5増加し、A7 A8 、A9 A10、A12A13、A20A21ではNの値は0.5減少する。全体では、N=1×4+0.5×2−0.5×4=3で奇数であるため、点Pは22角形の内点である。 【0037】[実施例4]本実施例は、2次元平面を図8に示すように有限の要素に分割し、その分割された要素中を運動する粒子の軌道を計算するシミュレーション装置に関するものである。 【0038】本実施例の実現は図6に示したような計算機内で行われる。図6において、61は計算機本体であり、CPU、メモリ、記憶媒体であるフロッピー(登録商標)を読み込む装置65、CD−ROMを読み込む装置66、ハードディスク67等を含んでいる。又、モニター62やキーボード63やマウス64とケーブルを通じて電気的に連結され、様々な制御を行ったり、又は行われたりしている。 【0039】本発明の内外点判定方法は、実施例1〜3で示したものであり、粒子の運動を計算する方法と共にプログラムとして媒体68に書かれている。媒体68のデータを計算機61内部のメモリに展開し、実際の内外点判定を計算機61内で行っている。 【0040】本実施例は、図8に示したような粒子の運動についてのものである。図8において矢印が粒子の軌跡を示している。要素を指定すると粒子に加わる力が一意的に決まるとし、粒子は加わった力から或る運動方程式を解いて次のステップの軌道を描いて運動するとしている。従って、本実施例の問題は、粒子の位置を決定した際に、その粒子がどの要素に属しているかを決定することが重要なステップである。 【0041】図7に本実施例の荷電粒子の運動を本実施例の荷電粒子の運動を計算するアルゴリズムを示す。 【0042】先ず、各要素は閉多角形で構成されていることとする。ステップ21で開始したシミュレーションはステップ22の前処理計算で、全ての要素に対して粒子の力を予め計算することとする。ステップ23において粒子の軌道計算が所望の結果を得て終了するか否かの判断をする。計算を終えない場合はステップ24に進み、どの要素に属するかの内外点判定を行う。或る要素を指定すると仮定より粒子に加わる力が計算されるため、対応する力で軌道計算(ステップ25)を行い、点の移動をステップ26で行い、ステップ23に進む。このようにして、所望の結果を得るまで粒子の軌道を追ってゆけば良い。 【0043】尚、本実施例では、粒子の軌道シミュレーションを行う装置及びそのシミュレーションを行うプログラムを記録した記録媒体について述べたが、本発明の内外点判定アルゴリズムは、粒子の軌道シミュレーションに限って応用されるものではない。より汎用のグラフィック処理装置においても使用可能である。 【0044】 【発明の効果】以上の説明で明らかなように、本発明によれば、多角形Aの頂点の座標列と或る点Pの座標が与えられたとき、第1に多角形Aの頂点のうちに点Pと一致するものが存在する場合は、該点Pは多角形の頂点上にあるとし、第2に点Pが多角形の頂点上にない場合で、該多角形の何れかの辺上に点Pを含む場合は、該点Pは多角形の辺上にあるとし、第3に点Pが多角形の頂点上にも辺上にも存在しない場合、点Pから或る方向に半直線PXを引き、初期値0の内外判定数Nを考え、多角形Aの全ての辺に対して辺と半直線PXが共有点を持たない場合はNの増減は0とし、半直線PXと交差するとNに1を加え、多角形Aの或る辺の始点及び終点の両方が半直線PX上にある場合は、Nの増減は0、多角形Aの或る辺の始点或は終点の何れか一方が半直線PX上にある場合は、始点或は終点が半直線PX上にある辺を、該始点或は終点方向に延長した線分が一方向きに半直線PXと交差するとNに0.5を加え、他方向きに半直線PXと交差するとNに0.5を減じる演算を行い、最終的にNが偶数ならば、点Pは多角形Aの外点であり、Nが奇数ならば、点Pは多角形Aの内点であるとしたため、折線閉多角形と或る点が与えられたとき、判定点と閉多角形の位置関係に拘らず、判定点が閉多角形内にあるか否かを判定することができるという効果が得られる。
|
| 【出願人】 |
【識別番号】000001007 【氏名又は名称】キヤノン株式会社 【住所又は居所】東京都大田区下丸子3丁目30番2号
|
| 【出願日】 |
平成13年9月14日(2001.9.14) |
| 【代理人】 |
【識別番号】100092853 【弁理士】 【氏名又は名称】山下 亮一
|
| 【公開番号】 |
特開2003−85569(P2003−85569A) |
| 【公開日】 |
平成15年3月20日(2003.3.20) |
| 【出願番号】 |
特願2001−280180(P2001−280180) |
|