領域分割装置及び領域分割プログラム
【課題】従来の方法に比べて簡単に、重なりを持つ複数の領域を重ならない領域へ分割する領域分割装置を提供する。
【解決手段】領域断片取得部13は、読出部12で読み出した基点から閉領域Aの境界線を時計回り方向にたどって次の交点である第1の交点を求め、その第1の交点から閉領域Bの境界線を時計方向と反時計方向にたどって、2つの領域断片をそれぞれ求める。判定部14は、得られた領域断片の始点が既に登録されている分割領域の終点か否か、及び、その分割領域の境界線をたどった方向と領域断片が閉領域Bをたどった方向が同じか否かを判定する。この条件が満たされれば、登録されている分割領域の境界線として領域断片を追加し、そのほかの場合には領域断片を新たな分割領域の境界線として、包含関係を示す領域種別を付加して登録する。この処理を、閉領域Aを周回するまで、各交点について順に行う。
【解決手段】領域断片取得部13は、読出部12で読み出した基点から閉領域Aの境界線を時計回り方向にたどって次の交点である第1の交点を求め、その第1の交点から閉領域Bの境界線を時計方向と反時計方向にたどって、2つの領域断片をそれぞれ求める。判定部14は、得られた領域断片の始点が既に登録されている分割領域の終点か否か、及び、その分割領域の境界線をたどった方向と領域断片が閉領域Bをたどった方向が同じか否かを判定する。この条件が満たされれば、登録されている分割領域の境界線として領域断片を追加し、そのほかの場合には領域断片を新たな分割領域の境界線として、包含関係を示す領域種別を付加して登録する。この処理を、閉領域Aを周回するまで、各交点について順に行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、領域分割装置及び領域分割プログラムに関するものである。
【背景技術】
【0002】
従来より画像処理分野においては、処理領域を分割する領域分割処理がしばしば用いられる。特に、それぞれが重なる処理領域に対して処理を行う場合があり、このような場合には重なり方の関係に従って各処理領域を分割することが行われている。図17は、領域分割の一例の説明図である。例えば図17(A)に示すように実線で示した領域Aと、領域Aよりも太い線で示した領域Bとが重なり合っている場合を考える。この場合、図17(B)に示すように、重ならない各領域に分割する。図17(A)において、Acは領域A外を示し、Bcは領域B外を示している。すなわち、A∩Bは領域Aと領域Bが重なっていた分割領域、A∩Bcは領域A内であるが領域B外の分割領域、Ac∩Bは領域B内であるが領域A外の分割領域、Ac∩Bcは領域Aにも領域Bにも含まれない領域を示している。図17(B)においては、領域Aにも領域Bにも含まれない領域については示していない。
【0003】
このような領域分割を必要とする処理の一例としては、特許文献1に記載されているように複数の図形を一部重ねて半透明処理により描画する場合が挙げられる。例えば図形1と図形2を描画する際に、図形1のうち図形2と重ならない部分(図17(B)におけるA∩Bcの領域に対応)と、図形2のうち図形1と重ならない部分(図17(B)におけるAc∩Bの領域に対応)については、図形1及び図形2の描画をそのまま行えばよい。図形1と図形2が重なる部分(例えば図17(B)におけるA∩Bの領域に対応)については、両者を考慮した描画処理が必要となる。そのため、図形1のうち図形2と重ならない部分と、図形2のうち図形1と重ならない部分と、図形1と図形2が重なる部分とに領域を分割し、それぞれの領域についての描画処理を行っている。もちろん、このほかにも領域分割が必要な場合は多い。
【0004】
このような複数の図形が重なりを持つ場合に、それぞれ重ならない領域へ分割する一つの方法として、2重連結辺リストを用いた平面走査方式がある。この方法では、複数の図形の境界線となる辺をそれぞれ線分とし、ある特定の方向に走査して線分との交点をもとに線分同士の交点を求める。この交点で線分を分割するとともに、交点を中心に例えば時計回りで隣接する線分を結合してゆく。結合の際に、一方の線分については交点へ向かう方向の線分ベクトルとし、もう一方は交点を始点とする方向の線分ベクトルとする。分割した各線分は2回ずつ用いられ、方向が異なる2つの線分ベクトルとして別々の線分ベクトルと結合されることになる。得られた連結された線分ベクトルにより囲まれた領域が、分割された領域を示すことになる。
【0005】
【特許文献1】特開平11−327534号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
本発明は、従来の方法に比べて簡単に、重なりを持つ複数の領域を重ならない領域へ分割することができる領域分割装置及び領域分割プログラムを提供することを目的とするものである。
【課題を解決するための手段】
【0007】
本願請求項1に記載の発明は、第1の閉領域の境界線の情報を記憶する第1の記憶手段と、前記第1の閉領域と境界線が交差する第2の閉領域の境界線の情報を記憶する第2の記憶手段と、分割領域の境界線の情報を記憶する第3の記憶手段と、前記第1の記憶手段から前記第2の閉領域との交点を所定の方向に前記第1の閉領域を周回するまで順に基点として読み出す読出手段と、前記読出手段で読み出した基点から前記第1の閉領域の境界線を所定の方向にたどって次の第2の閉領域の境界線との交点である第1の交点から第2の閉領域の境界線を時計方向と反時計方向にたどってそれぞれ基点から第1の交点を通り第2の交点を終点とする領域断片と基点から第1の交点を通り第3の交点を終点とする領域断片をそれぞれ求める領域断片取得手段と、前記領域断片取得手段で求めた2つの領域断片について前記領域断片の始点が前記第3の記憶手段に記憶されている分割領域の境界線のその時点での終点として登録されているか否か及び登録されている場合に該登録されている分割領域の境界線をたどった方向と前記領域断片が前記第2の閉領域をたどった方向が同じか否かを判定する判定手段と、前記判定手段によって基点が既に登録されていると判定され領域断片がたどった方向が分割領域の境界線がたどった方向であると判定された場合には該登録されている分割領域の境界線として前記領域断片を追加しそのほかの場合には前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する登録手段を有することを特徴とする領域分割装置である。
【0008】
本願請求項2に記載の発明は、請求項1に記載の領域分割装置の前記登録手段が、前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する際に、前記領域断片の基点から第1の交点までの前記第1の閉領域の境界線が前記第2の閉領域の内部か否か及び第1の交点から前記第2の閉領域の境界線をたどった方向により、当該分割領域が前記第1の閉領域と前記第2の閉領域との集合演算により定められる領域のいずれに属するかを示す領域種別を決定し、該領域種別を前記新たな分割領域に付加して登録することを特徴とする領域分割装置である。
【0009】
本願請求項3に記載の発明は、請求項1または請求項2に記載の領域分割装置の構成に加えて、さらに、前記第1の閉領域と前記第2の閉領域の交点を検出して前記第1の記憶手段及び第2の記憶手段に境界線の情報として記憶させる交点検出手段を有することを特徴とする領域分割装置である。
【0010】
本願請求項4に記載の発明は、請求項1ないし請求項3のいずれか1項に記載の領域分割装置の構成に加えて、さらに、前記第1の閉領域と前記第2の閉領域が交点を有するか否かを判定する交点判定手段と、前記交点判定手段が交点を有しないと判定した場合に包含処理を行う包含処理手段を有し、前記判定手段が交点を有すると判定した場合に前記読出手段、領域断片取得手段、判定手段、登録手段による処理を行い、前記包含処理手段は、前記第1の閉領域と前記第2の閉領域に重なりがない場合には前記第1の閉領域及び前記第2の閉領域を処理結果とし、一方の閉領域が内部に他方の閉領域を包含する場合には、前記一方の閉領域の前記他方の閉領域を除く領域を分割して、分割した各領域と前記他方の閉領域を処理結果とすることを特徴とする領域分割装置である。
【0011】
本願請求項5に記載の発明は、請求項1ないし請求項4のいずれか1項に記載の領域分割装置の構成に加えて、さらに、前記第3の記憶手段に登録された分割領域が接触点または接触線を含む場合に接触する点で分割領域を分割する接触点分割手段をさらに有することを特徴とする領域分割装置である。
【0012】
本願請求項6に記載の発明は、請求項1ないし請求項4のいずれか1項に記載の領域分割装置の構成に加えて、さらに、前記第1の閉領域と前記第2の閉領域が接触点を有する場合に2つの交点となるように前記第1の記憶手段に記憶されている前記第1の閉領域の境界線の情報または前記第2の記憶手段に記憶されている前記第2の閉領域の境界線の情報を変更する変更手段を有することを特徴とする領域分割装置である。
【0013】
本願請求項7に記載の発明は、コンピュータに、請求項1ないし請求項6のいずれか1項に記載の領域分割装置の機能を実行させることを特徴とする領域分割プログラムである。
【発明の効果】
【0014】
本願請求項1に記載の発明によれば、本発明の構成を用いない場合に比べて、簡単に、重なりを持つ複数の領域を、重なりのない複数の領域へ分割することができる。
【0015】
本願請求項2に記載の発明によれば、分割した各領域に対して第1の閉領域と第2の閉領域との集合演算により定められる領域のいずれに属するかを示す領域種別を簡単に付与することができる。
【0016】
本願請求項3に記載の発明によれば、本構成を有しない場合に比べて処理を高速化することができる。
【0017】
本願請求項4に記載の発明によれば、一方の閉領域が他方の閉領域に含まれている場合でも領域の分割を行うことができ、両者の重なりがない場合についても対応することができる。
【0018】
本願請求項5及び請求項6に記載の発明によれば、2つの閉領域の境界が接している場合についても、重なりのない複数の領域へ分割することができる。
【0019】
本願請求項7に記載の発明は、本願請求項1ないし請求項6のいずれか1項に記載の発明の効果と同等の効果を得ることができる。
【発明を実施するための最良の形態】
【0020】
図1は、本発明の第1の実施の形態を示すブロック図である。図中、11は記憶部、12は読出部、13は領域断片取得部、14は判定部、15は登録部である。ここでは、第1の閉領域Aと第2の閉領域Bとが重なりを有している場合に、閉領域Aと閉領域Bとの集合演算により定められる領域、すなわち、閉領域Aと閉領域Bの両方に含まれる領域、閉領域Aには含まれるが閉領域Bには含まれない領域、閉領域Bには含まれるが閉領域Aには含まれない領域に、それぞれが重ならないように分割する。3以上の閉領域が重なる場合には、2つの閉領域について分割した後、分割した各領域と別の閉領域との重なりをもとに分割処理を行ってゆけばよい。従って、2つの閉領域についての説明を行う。
【0021】
なお、閉領域Aと閉領域Bの一方が他方に完全に包含されることはないものとする。また、各閉領域の境界線がそれぞれ自分自身と途中で交差したり、内部に当該閉領域に含まれない領域が存在していないものとする。さらに、閉領域Aと閉領域Bの境界線が接する箇所はないものとする。これらの場合のいくつかについての対処は、別の実施の形態で述べる。
【0022】
記憶部11は、閉領域Aと閉領域Bの境界線の情報と、分割領域の境界線の情報を記憶する。各領域の境界線の情報は、境界線上のいくつかの点の情報により与えられる。点の間は、例えば直線や曲線で結ばれて境界線を構成する。なお、閉領域A及び閉領域Bの境界線の情報として、両者の境界線の交点の情報が与えられていると、後述するように境界線をたどって次の交点を見つける際に有用である。
【0023】
読出部12は、記憶部11から閉領域Aまたは閉領域Bのいずれか一方について、交点を所定の方向に周回するまで順に基点として読み出し、領域断片取得部13に渡す。ここでは閉領域Aについて、交点を時計回り方向に順に読み出して基点とする。最初の基点としては、ここでは閉領域B外に存在する閉領域Aの境界線が、閉領域Bと交差する2つの交点のうちの一方とする。このとき、他方の交点が、一方の交点から時計回り方向に存在する交点となるようにする。なお、確実にこのような条件を満たす最初の交点を見つけるため、例えば2つの閉領域のうち、特定の軸に関する座標値が最小あるいは最大となる点を特定し、その点を有する閉領域を閉領域A、もう一方の閉領域を閉領域Bとし、特定した点から閉領域Aの境界線を反時計回り方向にたどって得られる閉領域Bとの交点を最初の基点とすればよい。もちろん、この方法に限らず、最初の基点を決定してもよい。
【0024】
領域断片取得部13は、読出部12で読み出した基点から、ここでは閉領域Aの境界線を所定の方向にたどって次の第2の閉領域の境界線との交点である第1の交点を求め、さらにその第1の交点から閉領域Bの境界線を時計回り方向と反時計回り方向にたどって、それぞれ基点から第1の交点を通り第2の交点を終点とする領域断片と、基点から第1の交点を通り第3の交点を終点とする領域断片をそれぞれ求める。
【0025】
判定部14は、領域断片取得部13で求めた2つの領域断片について、領域断片の始点が記憶部11に分割領域境界線情報として記憶されている分割領域の境界線のその時点での終点として登録されているか否か、及び、登録されている場合には、その登録されている分割領域の境界線をたどった方向と、領域断片が閉領域Bをたどった方向が同じか否かを判定する。
【0026】
登録部15は、判定部14によって領域断片の始点が既に登録されていると判定され、領域断片が閉領域Bをたどった方向が分割領域の境界線がたどった方向であると判定された場合には、その登録されている分割領域の境界線として、分割領域境界線情報に領域断片を追加する。また、そのほかの場合には、領域断片を新たな分割領域の境界線として、分割領域境界線情報を記憶部11に登録する。新たな分割領域の登録を行う際には、当該分割領域が閉領域Aと閉領域Bとの集合演算により定められる領域のいずれに属するかを示す領域種別を付加する。この領域種別は、当該分割領域が閉領域A及び閉領域Bの両方に含まれるのか、閉領域Aに含まれるが閉領域Bには含まれないのか、閉領域Bに含まれるが閉領域Aには含まれないのか、あるいは閉領域Aにも閉領域Bにも含まれないのかを示すものである。付加する領域種別の決定は、分割領域の境界線として登録する領域断片の基点から第1の交点までの閉領域Aの境界線が閉領域Bの内部か否か、及び、第1の交点から閉領域Bの境界線をたどった方向により決定される。
【0027】
図2は、本発明の第1の実施の形態における動作の一例を示す流れ図である。なお、予め閉領域A境界線情報及び閉領域B境界線情報が記憶部11に記憶されているものとする。また、閉領域A境界線情報及び閉領域B境界線情報には、互いの交点が予め検出されているものとする。ここでは交点をa(i)とする。上述のように、交点a(i)は閉領域Aの時計回り方向に順に存在するものとする。また、最初の基点となる交点a(1)は、例えば2つの閉領域のうち、座標値が最小あるいは最大となる点を特定し、その点を有する閉領域を閉領域A、もう一方の閉領域を閉領域Bとし、特定した点から閉領域Aの境界線を反時計回り方向にたどって得られる閉領域Bとの交点をa(1)とすればよい。ここではこの交点a(1)から次の交点a(2)までの閉領域Aの境界線は閉領域Bの外部であるものとする。
【0028】
S31において、基点となる交点を指定する変数iを1とし、交点a(1)を最初の基点とする。読出部12は、この交点a(1)の情報を記憶部11から読み出して領域断片取得部13に渡す。
【0029】
S32において、領域断片取得部13は基点a(i)から閉領域Aの境界線を時計回り方向にたどって次の第2の閉領域の境界線との交点である第1の交点を求める。上述のように交点の情報が境界線情報として予め記憶されていれば、次の交点の情報は簡単に取得される。すなわち、基点a(i)の次の交点である第1の交点は、交点a(i+1)である。さらに領域断片取得部13は、その第1の交点a(i+1)から閉領域Bの境界線を時計回り方向と反時計回り方向にたどって、2つの領域断片を求める。基点から第1の交点を通り時計回り方向に閉領域Bの境界線をたどった領域断片をCR(i)、基点から第1の交点を通り反時計回り方向に閉領域Bの境界線をたどった領域断片をCL(i)とする。
【0030】
S33において、領域断片CR(i)、CL(i)の始点である基点a(i)が、分割領域の境界線のここまでの処理における終点として登録されているか否か、及び、登録されている場合にはその分割領域の境界線が閉領域Bをたどっている方向と領域断片が閉領域Bをたどっている方向が一致するか否かを判定部14で判定する。この条件を満たす領域断片については、S34において、登録部15は登録済みの分割領域の境界線の終点の後に、条件を満たす領域断片を追加して登録する。これにより、当該分割領域の終点は、追加された領域断片の終点である第2または第3の交点となるか、あるいは分割領域として境界線が周回する。
【0031】
S33の条件を満たさない場合には2つの領域断片について、あるいは一方の領域断片は条件を満たしてS34の処理を行った場合の他方の領域断片については、S35において登録部15は新たな分割領域の境界線の一部として各領域断片を新規登録する。登録の際には、対応する領域種別を付加する。
【0032】
図3は、領域種別の一例の説明図である。図3において、Acは閉領域A外を示し、Bcは閉領域B外を示している。すなわち、A∩Bは閉領域Aと閉領域Bの両方に含まれることを示し、A∩Bcは閉領域A内であるが閉領域B外であることを示し、Ac∩Bは閉領域B内であるが閉領域A外であることを示し、Ac∩Bcは閉領域Aにも閉領域Bにも含まれないことを示している。
【0033】
上述のように交点a(1)からa(2)までの閉領域Aの境界線が閉領域Bの外部であり、時計回り方向に閉領域Aの交点をたどって順に基点とする場合には、変数iの値と領域断片がCL(i)かCR(i)かにより、図3に示すような領域種別を付加する。すなわち、変数iが奇数のときの領域断片CL(i)については、閉領域Aに含まれるが閉領域Bには含まれない(A∩Bc)領域種別を付加し、領域断片CR(i)については、閉領域Aにも閉領域Bにも含まれない(Ac∩Bc)領域種別を付加する。また、変数iが偶数のときの領域断片CL(i)については、閉領域Bに含まれるが閉領域Aには含まれない(Ac∩B)領域種別を付加し、領域断片CR(i)については、閉領域Aと閉領域Bの両方に含まれる(A∩B)領域種別を付加する。
【0034】
ここでは交点a(1)からa(2)までの閉領域Aの境界線が閉領域Bの外部であるとしていることから、変数iが奇数であれば閉領域B外であり、変数iが偶数であれば、閉領域B内であると判定すればよい。これは、交点を通過すれば閉領域Bの内外が反転するからである。もちろん、最初の交点a(1)が閉領域Bの内部であれば変数iの値によって付加する領域種別は変わるし、閉領域Aの交点をたどる方向が違う場合も、付加する領域種別は変わる。しかし、これらの条件が決まれば、閉領域Bの内外と領域断片がCL(i)かCR(i)かによって付加する領域種別は決定される。
【0035】
図2に戻り、S36において、読出部12は次の交点a(i+1)が最初の基点a(1)であるか否かを判定し、交点a(i+1)が交点a(1)でない場合には、S37において変数iを1だけ増加させ、次の交点a(i)を基点として領域断片取得部13に渡し、S32へ戻って処理を続ける。
【0036】
このような処理を繰り返して行い、S36で交点a(i+1)が交点a(1)である場合には周回したものとして処理を終える。これまでの処理によって、分割領域の境界線の情報が記憶部11に分割領域境界線情報として登録されている。また、各分割領域には分割前の閉領域A,Bとの集合演算により定められる領域を示す領域種別が付加されている。例えば領域の重なりを考慮した描画処理を行う場合には、各分割領域について領域種別に従った描画処理を行えばよい。
【0037】
図4は、本発明の第1の実施の形態における動作の具体例の説明図、図5、図6は、分割領域境界線情報の変化の一例の説明図である。図4において、閉領域Aの境界線を実線で示し、閉領域Bの境界線を閉領域Aの境界線よりも太い線で示している。また、ここでは最初の基点を得るため閉領域Aの境界線上の点Pを求め、点Pから反時計回り方向に閉領域Aの境界線をたっどって最初に現れる閉領域Bとの交点をa(1)としている。この交点a(1)から閉領域Aの境界線を時計回り方向にたどって出現する閉領域Bとの交点をそれぞれa(2)〜a(6)としている。また、図5において時計回り方向をR、反時計回り方向をLとして示している。
【0038】
まず、交点a(1)を基点とする。そして、次の交点a(2)を第1の交点とし、この交点a(2)から閉領域Bを時計回り方向にたどって交点a(3)に至る領域断片CR(1)と、交点a(2)から閉領域Bを反時計回り方向にたどって交点a(5)に至る領域断片CL(1)を得る。まだ分割領域境界線情報は記憶部11に記憶されていないので、登録部15はこれらの領域断片CR(1)、CL(1)を新たな分割領域の境界線の一部として登録する。それぞれの新たな分割領域の領域種別は、図3に従って付与する。領域断片CR(1)を新たな分割領域の境界線の一部として登録した場合には領域種別としてAc∩Bcが、領域断片CL(1)を新たな分割領域の境界線の一部として登録した場合には領域種別としてA∩Bcが、それぞれ付加される。ここまでで登録された分割領域境界線情報の一例を図5(A)に示している。
【0039】
次に交点a(2)を基点とする。そして、次の交点a(3)を第1の交点とし、この交点a(3)から閉領域Bを時計回り方向にたどって交点a(4)に至る領域断片CR(2)と、交点a(3)から閉領域Bを反時計回り方向にたどって交点a(2)に至る領域断片CL(2)を得る。基点である交点a(2)を終点とする分割領域境界線情報は記憶部11に記憶されていないので、登録部15はこれらの領域断片CR(2)、CL(2)を新たな分割領域の境界線の一部として登録する。領域断片CR(2)を新たな分割領域の境界線の一部として登録した場合には領域種別としてA∩Bが、領域断片CL(2)を新たな分割領域の境界線の一部として登録した場合には領域種別としてAc∩Bが、それぞれ付加される。ここまでで登録された分割領域境界線情報の一例を図5(B)に示している。
【0040】
次に交点a(3)を基点とする。そして、次の交点a(4)を第1の交点とし、この交点a(4)から閉領域Bを時計回り方向にたどって交点a(1)に至る領域断片CR(3)と、交点a(4)から閉領域Bを反時計回り方向にたどって交点a(3)に至る領域断片CL(3)を得る。図5(B)の1行目に示すように、基点である交点a(3)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は時計回り方向である。従って、領域断片CR(3)を1行目の分割領域境界線情報に追加する。これにより、図5(C)の1行目のようになる。また、領域断片CL(3)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からA∩Bcが付加される。ここまでで登録された分割領域境界線情報の一例を図5(C)に示している。
【0041】
次に交点a(4)を基点とする。そして、次の交点a(5)を第1の交点とし、この交点a(5)から閉領域Bを時計回り方向にたどって交点a(2)に至る領域断片CR(4)と、交点a(5)から閉領域Bを反時計回り方向にたどって交点a(6)に至る領域断片CL(4)を得る。図5(C)の3行目に示すように、基点である交点a(4)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は時計回り方向である。従って、領域断片CR(4)を図5(C)の3行目の分割領域境界線情報に追加する。これにより、図5(D)の3行目のようになる。また、領域断片CL(4)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からAc∩Bが付加される。ここまでで登録された分割領域境界線情報の一例を図5(D)に示している。
【0042】
次に交点a(5)を基点とする。そして、次の交点a(6)を第1の交点とし、この交点a(6)から閉領域Bを時計回り方向にたどって交点a(5)に至る領域断片CR(5)と、交点a(6)から閉領域Bを反時計回り方向にたどって交点a(1)に至る領域断片CL(5)を得る。図5(D)の2行目に示すように、基点である交点a(5)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は反時計回り方向である。従って、領域断片CL(5)を図5(D)の2行目の分割領域境界線情報に追加する。これにより、図6(A)の2行目のようになる。また、領域断片CR(5)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からAc∩Bcが付加される。ここまでで登録された分割領域境界線情報の一例を図6(A)に示している。
【0043】
次に交点a(6)を基点とする。そして、次の交点a(1)を第1の交点とし、この交点a(1)から閉領域Bを時計回り方向にたどって交点a(6)に至る領域断片CR(6)と、交点a(1)から閉領域Bを反時計回り方向にたどって交点a(4)に至る領域断片CL(6)を得る。図6(A)の6行目に示すように、基点である交点a(6)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は反時計回り方向である。従って、領域断片CL(6)を図6(A)の6行目の分割領域境界線情報に追加する。これにより、図6(B)の6行目のようになる。また、領域断片CR(6)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からA∩Bが付加される。ここまでで登録された分割領域境界線情報の一例を図6(B)に示している。
【0044】
次の交点は交点a(1)である。閉領域Aを周回したので処理を終える。ここまでの処理で記憶部11に記憶されている分割領域境界線情報は図6(B)に示されており、それぞれが分割領域である。また、各分割領域には閉領域Aと閉領域Bとの集合演算により定められる領域を示す領域種別が付加されている。
【0045】
図7は、本発明の第2の実施の形態を示すブロック図である。図中、21は交点検出部、22は交点判定部、23は包含処理部、24は回転方向判定部、25は領域分割部、26は接触点分割部である。この第2の実施の形態では、上述の第1の実施の形態で示した構成により領域分割の処理を実行するための前処理と、一方の閉領域が他方の閉領域の内部に含まれている場合の処理を追加したものである。
【0046】
交点検出部21は、閉領域Aの境界線と閉領域Bの境界線の交点を検出して、その交点の情報を閉領域A境界線情報及び閉領域B境界線情報として追加して記憶部11に記憶させる。上述の第1の実施の形態における動作の一例の説明では、交点が閉領域A境界線情報及び閉領域B境界線情報に含まれているものとして説明しているが、交点検出部21はこの交点に関する情報を閉領域A境界線情報及び閉領域B境界線情報に追加するものである。
【0047】
交点判定部22は、閉領域Aと閉領域Bが交点を有するか否かを判定する。与えられた閉領域Aと閉領域Bとは、例えば重なる部分がない場合あるいは一方が他方の内部に存在する場合には交点を有しない。交点判定部22は、このような場合については後述する包含処理部23により分割の処理を行わせるためのものである。この交点判定部22が交点を有すると判定した場合に、領域分割部25による上述の第1の実施の形態で説明した領域分割の処理を行う。
【0048】
包含処理部23は、交点判定部22で閉領域Aと閉領域Bが交点を有しないと判定した場合に、包含処理を行う。閉領域Aと閉領域Bが交点を有しない場合としては、閉領域Aと閉領域Bに重なりがない場合と、いずれか一方の閉領域が内部に他方の閉領域を包含する場合である。閉領域Aと閉領域Bに重なりがない場合には、領域を分割する必要がないので、閉領域Aおよび閉領域Bのデータをそのまま処理結果とすればよい。一方の閉領域が内部に他方の閉領域を包含する場合には、一方の閉領域の他方の閉領域を除く領域を分割して、分割した各領域と他方の閉領域を処理結果とする。なお、包含処理部23で処理する場合には領域分割部25による分割処理は行わず、処理を効率化する。
【0049】
回転方向判定部24は、閉領域Aおよび閉領域Bの境界線を示す点列が時計回り方向に並べられているのか、あるいは反時計回り方向に並べられているのかを判定する。第1の実施の形態における動作の一例でも説明したように、いずれの方向に境界線をたどるかによって、新たに部分領域を登録する際に付加する領域種別が異なってくる。そのため、この回転方向判定部24において閉領域Aおよび閉領域Bの回転方向を判定しておく。あるいはさらに、所定の方向、例えば時計回り方向となるように点列を並べ直しておけばよい。
【0050】
領域分割部25は、上述の第1の実施の形態で示した読出部12、領域断片取得部13、判定部14、登録部15を有し、領域分割処理を行う。
【0051】
接触点分割部26は、領域分割部25で領域分割処理を行ったことにより得られた記憶部11に分割領域境界線情報として記憶されている各分割領域について、境界線が接触点または接触線を含む場合に、接触する点で分割領域をさらに分割する。あるいは、接触点または接触線を微少な距離だけ離した点または線を設定し、分割領域が接触点または接触線を含まないように変更してもよい。
【0052】
本発明の第2の実施の形態における動作の一例について説明してゆく。閉領域Aおよび閉領域Bの境界線を示す点列のデータが与えられると、このデータを閉領域A境界線情報および閉領域B境界線情報として記憶部11に記憶する。ここでは閉領域A境界線情報の一例として、例えば境界線上のn番目の点について、その点の参照用座標PXA0(n)、PYA0(n)、その点が交点かそれ以外の点かを示すフラグVTA(n)、交点の場合には閉領域Bの点と対応づける情報VNA(n)などを含んでいるものとする。閉領域B境界線情報についても、例えば境界線上のn番目の点について、その点の参照用座標PXB0(n)、PYB0(n)、その点が交点かそれ以外の点かを示す情報VTB(n)、交点の場合には閉領域Aの点と対応づける情報VNB(n)などを含んでいるものとする。
【0053】
図8は、交点検出部による交点検出処理の一例を示す流れ図である。ここでは、閉領域Aの境界線上の点列としてnA個の点が与えられ、また閉領域Bの境界線上の点列としてnB個の点が与えられているものとする。つまり、PXA0(n)、PYA0(n)(n=0,…,nA−1)及び、PXB0(n)、PYB0(n)(n=0,…,nB−1)が与えられているとする。これらの与えられた参照用座標をもとに、交点を加えてゆくための更新用座標PXA(n)、PYA(n)及び更新用座標PXB(n)、PYB(n)を用いる。なお、処理前はVTA(n)、VTB(n)は交点以外を示す情報が設定され、VNA(n)、VNB(n)には情報が設定されていない状態になっているものとし、交点の追加などにより更新用座標PXA(n)、PYA(n)及び更新用座標PXB(n)、PYB(n)を更新するのに合わせて、VTA(n)、VNA(n)、VTB(n),VNB(n)も更新してゆくものとする。
【0054】
S41において、閉領域Aの点列を選択するための変数nを初期値0に設定する。また、nA0=nA、nB0=nBとしてnAとnBの値をnA0,nB0に退避しておく。さらに、
PXA(i)=PXA0(i) (i=0,…,nA−1)
PYA(i)=PYA0(i) (i=0,…,nA−1)
PXB(i)=PXB0(i) (i=0,…,nB−1)
PYB(i)=PYB0(i) (i=0,…,nB−1)
で更新用座標を初期化する。更にまた、閉領域A上の点列更新用のカウンタcAを0で初期化し、閉領域B上の点列更新用のカウンタcB(i)をcB(i)=1(i=0,…,nB−1)で初期化する。
【0055】
S42において、閉領域Aの境界線上で変数nで示されるn番目の点(PXA0(n),PYA0(n))とn+1番目の点(PXA0(n+1),PYA0(n+1))とをつなぐ線分Cと、閉領域Bの境界線を示す各線分、すなわちm=0,…,nB0−1についてm番目の点(PXB0(m),PYB0(m))とm+1番目の点(PXB0(m+1),PYB0(m+1))とをつなぐ線分Dmとの交点を全て計算し、線分C上でn番目の点(PXA0(n),PYA0(n))に近い方から順に並べ替える。交点の数をk個とし、j番目(j=1,…,k)の交点の座標をCX(j)、CY(j)とし、閉領域Bにおいて交点が得られた線分Dmを特定するための情報をCN(j)=mとする。
【0056】
S43において、S42で交点が見つかったか否かを判定し、交点がない場合にはS50に進み、交点がk個(k≧1)ある場合にはS44〜S49の処理を行う。
【0057】
S44において、交点を特定する変数jを1に初期化した後、j番目の交点についての境界線情報を追加すべく、S45において閉領域A境界線情報を更新し、S46において閉領域B境界線情報を更新する。これらの閉領域A境界線情報及び閉領域B境界線情報の更新のため、まず、線分C上でPXA0(n)、PYA0(n)に近い側からj番目の交点が、それぞれ閉領域A、Bの境界線上において現状で何番目の点であるかを示す変数aと変数bを定める。具体的には、変数aにはcA+jを、また変数bにはΣi=1CN(j)+1cB(i)を設定する。なお、aは閉領域Aの境界線上で順に更新されていった番号でよいが、bは閉領域Aの境界線との交わりが発見されるごとに追加されるため、上記のような和の形で定義される。ここで求める変数bの値は、閉領域Bにおいて1番目からCN(j)+1番目までの、もともとの閉領域Bの点列の数と、既に得られている交点の数の合計値となる。これにより、当該交点が閉領域B上で他の交点を含めて何番目であるかがわかる。
【0058】
更に、cB(CN(j))>1の場合、つまり、閉領域Bの境界線上で(PXB0(CN(j)),PYB0(CN(j)))と(PXB0(CN(j)+1),PYB0(CN(j)+1))との間の交点が既に登録されている場合には、j番目の交点と既に登録されている交点が閉領域Bの境界線上でどの順番で現れるかによってbの値を変動させる。具体的には、l=bとして、(PXB0(CN(j)),PYB0(CN(j)))と(PXB(l),PYB(l))との閉領域Bの境界線上での長さと、(PXB0(CN(j)),PYB0(CN(j)))と(CX(j),CY(j))との閉領域Bの境界線上での長さとを比較し、前者の長さが後者の長さより小さくなるまでlから1を引いて再び比較を繰り返す。このようにして閉領域Bの境界線上でb番目の交点から交点を1つずつ戻りながら、閉領域Bの境界線上での交点が存在する位置(どの点の間にあるか)を特定する。その後に、bにl+1を代入しなおす。
【0059】
そしてS45における閉領域A境界線情報の更新においては、a番目以降の境界線の点列の情報を1つ分シフトするため、
PXA(i)=PXA(i−1) (i=a+1,…,nA+j)
PYA(i)=PYA(i−1) (i=a+1,…,nA+j)
VTA(i)=VTA(i−1) (i=a+1,…,nA+j)
VNA(i)=VNA(i−1)+p (i=a+1,…,nA+j)
を行う。ここでpは、VNA(i−1)<bならば0とし、VNA(i−1)≧bならば1とする。なお、後者は閉領域Aの境界線上においてa番目に新しい交点を加える際に、閉領域Bの境界線上でより後段側にある点の参照番号が1つ後ろにずれることを意味している。
【0060】
そして、a番目に交点の情報を追加挿入する。すなわち、
PXA(a)=CX(j)
PYA(a)=CY(j)
VTA(a)=1(交点を示す)
VNA(a)=b(閉領域Bのb番目の交点と対応することを示す)
を行う。更に、cB(CN(j))に1を加える。
【0061】
また、S46における閉領域B境界線情報の更新においては、b番目以降の境界線の点列の情報を1つ分シフトするため、
PXB(i)=PXB(i−1) (i=b+1,…,nB+j)
PYB(i)=PYB(i−1) (i=b+1,…,nB+j)
VTB(i)=VTB(i−1) (i=b+1,…,nB+j)
VNB(i)=VNB(i−1)+p (i=b+1,…,nB+j)
を行う。ここでpは、VNB(i−1)<aならば0とし、VNB(i−1)≧aならば1とする。なお、後者は閉領域Bの境界線上においてb番目に新しい交点を加える際に、閉領域Aの境界線上でより後段側にある点の参照番号が1つ後ろにずれることを意味している。
【0062】
そして、b番目に交点の情報を追加挿入する。すなわち、
PXB(b)=CX(j)
PYB(b)=CY(j)
VTB(b)=1(交点を示す)
VNB(b)=a(閉領域Aのa番目の交点と対応することを示す)
を行う。これにより、1つの交点の情報が各境界線情報に追加される。
【0063】
S47において、変数jに1を加え、S48において、jがkを超えたか否かを判定する。変数jの値がkを超えていなければ、未処理の交点が残っているのでS45へ戻って次の交点を追加する処理を行う。変数jの値がkを超えたら、交点の追加が終了しているのでS49に進む。
【0064】
S49において、交点を加えたことによる点列の数の更新を行う。すなわち、nA及びnBにkを加えるとともに、点列更新用のカウンタcAにk+1を加える。
【0065】
S50において、変数nに1を加え、S51において、閉領域Aを周回したか否かを判定する。S51の判定は、変数nの値がnA0に達したか否かを判定すればよい。変数nの値がnA0に達していなければ、S42へ戻って閉領域Aの境界線を構成する次の線分と閉領域Bとの交点を見つける処理を行う。変数nがnA0に達していれば、閉領域Aを周回したので、処理を終了する。この処理によって、閉領域A境界線情報及び閉領域B境界線情報として、両者の交点を含めた点列の情報が記憶されることになる。
【0066】
なお、閉領域A及び閉領域Bの境界線は直線による折れ線で構成されていなくてもよく、例えばベジエ曲線などの曲線で構成されていてもよい。境界線が曲線で構成されている場合には、曲線間の近似交点を求めてもよいし、あるいは、曲線を直線による折れ線で近似して交点を求め、近似してもよい。
【0067】
交点判定部22では、上述の交点検出部21による処理の際に、交点を検出したか否かを示す情報を受け取って、閉領域Aと閉領域Bとが交点を有するか否かを判定すればよい。あるいは、記憶部11に記憶されている閉領域A境界線情報あるいは閉領域B境界線情報を順に読み出して交点として登録されている点があるか否かを判定してもよい。
【0068】
交点判定部22で交点がないと判定された場合には、領域分割部25が分割処理を行わずに、処理が簡単な包含処理部23による包含処理を行う。図9は、包含処理部における包含処理の一例を示す流れ図、図10は、包含処理部における包含処理の具体例の説明図である。まずS61において、閉領域Aと閉領域Bとの包含関係を判定するため、ある特定の点を閉領域A及び閉領域Bから求める。特定の点としては、例えば最小の点や最大の点などを求めるとよい。ここでは一例としてx座標が最小の点をそれぞれ求めることとし、閉領域Aのx座標が最小の点をa、閉領域Bのx座標が最小の点をbとする。
【0069】
S62において、直線x=aと閉領域Bとの交点が、直線x=aにおいて点aを挟んで両側に存在するか否かを判定する。両側に存在する場合には、閉領域Bが閉領域Aを内部に含むことを示している。この場合には、S63において、閉領域Bのうち閉領域Aに含まれない部分を分割し、分割した複数の領域と閉領域Aを処理結果とする。分割する位置は閉領域Aの境界線を含むように分割するとよい。例えば直線x=aあるいは直線x=a+αで分割すると簡単である。
【0070】
S62で直線x=aと閉領域Bの交点がない場合や、交点があっても点aを挟むように存在しない場合には、さらにS64において、直線x=bと閉領域Aとの交点が、直線x=bにおいて点bを挟んで両側に存在するか否かを判定する。両側に存在する場合には、閉領域Aが閉領域Bを内部に含むことを示している。この場合には、S65において、閉領域Aのうち閉領域Bに含まれない部分を分割し、分割した複数の領域と閉領域Bを処理結果とする。分割する位置は閉領域Bの境界線を含むように分割するとよい。例えば直線x=bあるいは直線x=b+αで分割すると簡単である。
【0071】
S64でも直線x=bと閉領域Aの交点がない場合や、交点があっても点bを挟むように存在しない場合には、いずれか一方が他方を含む関係にはないものと判断できる。この場合には、閉領域Aと閉領域Bをそのまま処理結果とすればよい。
【0072】
例えば図10(A)に示した例では、直線x=aは交点を持たないためS62からS64へ移り、直線x=bと閉領域Aとの交点を求めると、点bを挟んで両側に交点を有している。従って、閉領域Aが閉領域Bを内部に含むと判断し、S65において、閉領域Aの閉領域B以外の部分を分割する。この例では、直線x=b+αで分割した例を図10(B)に示している。このように分割しておけば、分割領域はそれぞれ数学的に同位相の閉領域となるため、さらに他の閉領域との重なりに応じた分割処理を行う場合でも支障はない。
【0073】
交点判定部22で交点がないと判定された場合には、領域分割部25が分割処理を行うが、上述のように新たに部分領域を登録する際に付加する領域種別を決定する際に、各閉領域の境界線を示す点列の回転方向を求めておくとよい。その判定を回転方向判定部24で行っておく。なお、領域種別を付加せずに領域分割を行う場合には、回転方向判定部24は不要である。
【0074】
図11は、回転方向判定部における回転方向の判定処理の一例を示す流れ図、図12は、同じく具体例の説明図である。S71において、閉領域の境界線上の特定の点を選択する。特定の点としては、ここではx座標の値が最も小さい点のうち、y座標の値が最も小さい点aを選択する。S72において、閉領域の境界線を構成する点列から点aの一つ後の点bを取得する。またS73において、閉領域の境界線を構成する点列から点aの一つ前の点cを取得する。
【0075】
S74において、点aと点bを通る直線上で点aから点bに向かう方向から見て右側に点cが存在するのか、左側に点cが存在するのかを判定する。点aから点bへ向かう方向から見て右側に点cが存在する場合には、S75において、当該閉領域は時計回り方向と判定する。また、点aから点bへ向かう方向から見て左側に点cが存在する場合には、S76において、当該閉領域は反時計回り方向と判定する。
【0076】
図12(A)に示す例では、点aから点bへ向かう方向から見て左側に点cが存在するので、反時計回り方向と判定される。図12(B)に示す場合にも、点aから点bへ向かう方向から見て左側に点cが存在するが、実際には時計回り方向である。この場合、S71において点aを選択する際のx座標値が最小であるという条件を満たしていないので、図12(B)に示すような不都合は生じない。
【0077】
このようにして回転方向判定部24によって各閉領域の境界線を示す点列の回転方向がわかる。この回転方向に従って領域分割部25による分割処理により各分割領域に付加する領域種別を変更したり、あるいは、回転方向を統一して点列を並べ替えてから領域分割部25による分割処理を行えばよい。領域分割部25による分割処理は第1の実施の形態において説明した通りである。
【0078】
領域分割部25による分割処理では、接触点や接触線は交点ではないため境界線上の1点として扱われる。そのため、領域分割部25で分割された分割領域では、接触点や接触線がそのまま残った状態となっている。もちろんこのまま処理結果としてもよいが、例えば領域分割後に半透明処理を行う場合などでは、接触点あるいは接触線では塗りつぶしを行う面積がないため、不具合を生じかねない。そのため、ここでは接触点分割部26によって接触点または接触線で分割領域をさらに分割する。
【0079】
図13は、接触点分割部26による分割処理の一例を示す流れ図である。この処理は、処理結果として得られている各領域について、それぞれを処理対象として行う。S81において、処理対象の領域は接触点あるいは接触線を含むか否かを判定し、含まなければその処理対象の領域に対する接触点分割部26の処理は終了する。
【0080】
接触点あるいは接触線を含んでいる場合には、S82において、処理対象の領域の境界線上の点pを特定する。この点pは任意に特定すればよいが、ここではx座標の値が最小となる点を点pとする。
【0081】
S83において、処理対象の領域の境界線上にある接触点のうち、点pを挟む接触点を点a(1)、点a(2)とし、この点a(1)から点a(2)の方向に処理対象の領域の境界線をたどって接触点に番号を付与し、番号iにより特定される接触点を点a(i)とする。接触点では、境界線をたどると行きと帰りで2回の番号付けがなされることになる。なお、接触線では、その始点と終点を接触点とする。
【0082】
S84において、変数iを1に初期化し、S85において、点a(i)と次の点a(i+1)とが1つの接触点に番号付けしたものであるか否かを判定する。1つの接触点に番号付けした点である場合には、S86において、点a(i)から点a(i+1)までにより境界線が構成される領域を1つの分割領域とする。
【0083】
また、点a(i)と点a(i+1)が異なる接触点のものである場合には、S87において、点a(i)から点a(i+1)までと、1つの接触点に点a(i+1)とともに付与されている番号を有する点a(t)から次の点a(t+1)までにより境界線が構成される領域を1つの分割領域とする。なお、接触線の部分については分割領域とはしない。
【0084】
S86あるいはS87の処理の後、S88において、点a(i)と次の点a(i+1)とが1つの接触点に番号付けしたものとの判定が2回行われたか否かを判定し、2回行われた場合には処理を終了する。0回または1回であればS89において、変数iに1を加えてS85へ戻り、次の点についての処理を行う。
【0085】
図14は、接触点における分割処理の具体例の説明図である。例えば図14(A)に示すような閉領域A及び閉領域Bが与えられた場合には、領域分割部25によって図14(B)に示すような分割領域a,b,c,dが得られる。このうち分割領域aは接触点を有している。そのため、接触点分割部26によって図14(C)に示すように分割領域aを分割領域e,fに分割する。
【0086】
図15は、接触点における分割処理の別の具体例の説明図である。図14では接触点を有する簡単な例を示したが、図13に示す処理では、より複雑な例に対応している。図15(A)に示した分割領域の例では、接触点が2つと接触線が1つ含まれている。このような場合に、図13の処理に従いS82で点pを特定し、S83で各接触点に番号を付与してゆく。これによって図15(B)に示すように点p及び各点a(i)(i=1,…,8)が得られる。
【0087】
まずi=1とし、点a(1)と点a(2)は1つの接触点に対して番号が付与された点であるから、S86において、点a(1)から点a(2)へ至る境界線で構成される領域を1つの分割領域とする。これを図15(C)に示している。
【0088】
次にi=2とし、点a(2)と点a(3)を参照すると、異なる接触点であるので、S87において、点(2)から点a(3)までと、1つの接触点に点a(3)とともに付与されている番号を有する点a(8)から次の点a(1)までにより境界線が構成される領域を1つの分割領域とする。これを図15(D)に示している。
【0089】
さらにi=3とし、点a(3)と点a(4)を参照すると、異なる接触点であるので、S87における処理を行うが、この部分は接触線の部分であるので分割領域とはせずに次に進む。
【0090】
i=4とし、点a(4)と点a(5)を参照すると、異なる接触点であるので、S87において、点(4)から点a(5)までと、1つの接触点に点a(5)とともに付与されている番号を有する点a(6)から次の点a(7)までにより境界線が構成される領域を1つの分割領域とする。これを図15(E)に示している。
【0091】
i=5として点a(5)と点a(6)を参照すると、点a(5)と点a(6)は1つの接触点に対して番号が付与された点であるから、S86において、点a(5)から点a(6)へ至る境界線で構成される領域を1つの分割領域とする。これを図15(F)に示している。
【0092】
このi=5において、点a(i)と次の点a(i+1)とが1つの接触点に番号付けしたものとの判定が2回(i=1とi=5の場合)行われたので、これで接触点に関する分割処理を終える。この処理によって、図15(A)に示した接触点及び接触線を含む分割領域は、図15(C)、(D)、(E)、(F)に示した4つの領域に分割される。
【0093】
上述のように、この接触点及び接触線における分割処理は行わなくてもよい。あるいは、分割する代わりに接触点及び接触線で接触しないように境界線を構成することも可能である。すなわち、接触点を微少な距離だけ離した複数の点で近似したり、接触線を微少な間隔を有する複数の線で近似すればよい。
【0094】
あるいは、交点検出部21で交点を検出する際に、1つの接触点を微少な間隔を有する2つの交点として登録し、また接触線については両端を交点として登録すれば、領域分割部25において接触点の部分で分割された分割領域が得られる。なお、この場合には接触点を2つ交点としたことにより微少な分割領域が生成されるが、この微少な分割領域は後で削除すればよい。
【0095】
図16は、本発明の各実施の形態の機能をコンピュータプログラムで実現した場合におけるコンピュータプログラム及びそのコンピュータプログラムを格納した記憶媒体とコンピュータの一例の説明図である。図中、101はプログラム、102はコンピュータ、111は光磁気ディスク、112は光ディスク、113は磁気ディスク、114はメモリ、121はCPU、122は内部メモリ、123は読取部、124はハードディスク、125はインタフェース、126は通信部である。
【0096】
上述の本発明の各実施の形態で説明した各部の機能の一部または全部を、コンピュータにより実行可能なプログラム101によって実現してもよい。その場合、そのプログラム101およびそのプログラムが用いるデータなどは、コンピュータが読み取り可能な記憶媒体に記憶させておいてもよい。記憶媒体とは、コンピュータのハードウェア資源に備えられている読取部123に対して、プログラムの記述内容に応じて、磁気、光、電気等のエネルギーの変化状態を引き起こして、それに対応する信号の形式で、読取部123にプログラムの記述内容を伝達できるものである。例えば、光磁気ディスク111,光ディスク112(CDやDVDなどを含む)、磁気ディスク113,メモリ114(ICカード、メモリカードなどを含む)等である。もちろんこれらの記憶媒体は、可搬型に限られるものではない。
【0097】
これらの記憶媒体にプログラム101を格納しておき、例えばコンピュータ102の読取部123あるいはインタフェース125にこれらの記憶媒体を装着することによって、コンピュータからプログラム101を読み出し、内部メモリ122またはハードディスク124に記憶し、CPU121によってプログラム101を実行することによって、各実施の形態で説明した機能が実現される。あるいは、ネットワークなどを介してプログラム101をコンピュータ102に転送し、コンピュータ102では通信部126でプログラム101を受信して内部メモリ122またはハードディスク124に記憶し、CPU121によってプログラム101を実行することによって、各実施の形態で説明した機能を実現してもよい。なお、コンピュータ102には、このほかインタフェース125を介して様々な装置と接続してもよい。また、例えば記憶部11はハードディスク124や内部メモリ122により構成すればよい。
【0098】
もちろん、一部の機能についてハードウェアによって構成してもよいし、すべてをハードウェアで構成してもよい。あるいは、他の構成とともに本発明も含めたプログラムとして構成してもよい。例えば描画処理を行うプログラムとともに構成し、画像形成装置や表示装置に対して描画した画像を出力するように構成してもよい。もちろん、他の用途に適用する場合には、その用途におけるプログラムと一体化してもよい。
【図面の簡単な説明】
【0099】
【図1】本発明の第1の実施の形態を示すブロック図である。
【図2】本発明の第1の実施の形態における動作の一例を示す流れ図である。
【図3】領域種別の一例の説明図である。
【図4】本発明の第1の実施の形態における動作の具体例の説明図である。
【図5】分割領域境界線情報の変化の一例の説明図である。
【図6】分割領域境界線情報の変化の一例の説明図(続き)である。
【図7】本発明の第2の実施の形態を示すブロック図である。
【図8】交点検出部による交点検出処理の一例を示す流れ図である。
【図9】包含処理部における包含処理の一例を示す流れ図である。
【図10】包含処理部における包含処理の具体例の説明図である。
【図11】回転方向判定部における回転方向の判定処理の一例を示す流れ図である。
【図12】回転方向判定部における回転方向の判定処理の具体例の説明図である。
【図13】回転方向判定部における回転方向の判定処理の具体例の説明図である。
【図14】接触点における分割処理の具体例の説明図である。
【図15】接触点における分割処理の別の具体例の説明図である。
【図16】本発明の各実施の形態の機能をコンピュータプログラムで実現した場合におけるコンピュータプログラム及びそのコンピュータプログラムを格納した記憶媒体とコンピュータの一例の説明図である。
【図17】領域分割の一例の説明図である。
【符号の説明】
【0100】
11…記憶部、12…読出部、13…領域断片取得部、14…判定部、15…登録部、21…交点検出部、22…交点判定部、23…包含処理部、24…回転方向判定部、25…領域分割部、26…接触点分割部、101…プログラム、102…コンピュータ、111…光磁気ディスク、112…光ディスク、113…磁気ディスク、114…メモリ、121…CPU、122…内部メモリ、123…読取部、124…ハードディスク、125…インタフェース、126…通信部。
【技術分野】
【0001】
本発明は、領域分割装置及び領域分割プログラムに関するものである。
【背景技術】
【0002】
従来より画像処理分野においては、処理領域を分割する領域分割処理がしばしば用いられる。特に、それぞれが重なる処理領域に対して処理を行う場合があり、このような場合には重なり方の関係に従って各処理領域を分割することが行われている。図17は、領域分割の一例の説明図である。例えば図17(A)に示すように実線で示した領域Aと、領域Aよりも太い線で示した領域Bとが重なり合っている場合を考える。この場合、図17(B)に示すように、重ならない各領域に分割する。図17(A)において、Acは領域A外を示し、Bcは領域B外を示している。すなわち、A∩Bは領域Aと領域Bが重なっていた分割領域、A∩Bcは領域A内であるが領域B外の分割領域、Ac∩Bは領域B内であるが領域A外の分割領域、Ac∩Bcは領域Aにも領域Bにも含まれない領域を示している。図17(B)においては、領域Aにも領域Bにも含まれない領域については示していない。
【0003】
このような領域分割を必要とする処理の一例としては、特許文献1に記載されているように複数の図形を一部重ねて半透明処理により描画する場合が挙げられる。例えば図形1と図形2を描画する際に、図形1のうち図形2と重ならない部分(図17(B)におけるA∩Bcの領域に対応)と、図形2のうち図形1と重ならない部分(図17(B)におけるAc∩Bの領域に対応)については、図形1及び図形2の描画をそのまま行えばよい。図形1と図形2が重なる部分(例えば図17(B)におけるA∩Bの領域に対応)については、両者を考慮した描画処理が必要となる。そのため、図形1のうち図形2と重ならない部分と、図形2のうち図形1と重ならない部分と、図形1と図形2が重なる部分とに領域を分割し、それぞれの領域についての描画処理を行っている。もちろん、このほかにも領域分割が必要な場合は多い。
【0004】
このような複数の図形が重なりを持つ場合に、それぞれ重ならない領域へ分割する一つの方法として、2重連結辺リストを用いた平面走査方式がある。この方法では、複数の図形の境界線となる辺をそれぞれ線分とし、ある特定の方向に走査して線分との交点をもとに線分同士の交点を求める。この交点で線分を分割するとともに、交点を中心に例えば時計回りで隣接する線分を結合してゆく。結合の際に、一方の線分については交点へ向かう方向の線分ベクトルとし、もう一方は交点を始点とする方向の線分ベクトルとする。分割した各線分は2回ずつ用いられ、方向が異なる2つの線分ベクトルとして別々の線分ベクトルと結合されることになる。得られた連結された線分ベクトルにより囲まれた領域が、分割された領域を示すことになる。
【0005】
【特許文献1】特開平11−327534号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
本発明は、従来の方法に比べて簡単に、重なりを持つ複数の領域を重ならない領域へ分割することができる領域分割装置及び領域分割プログラムを提供することを目的とするものである。
【課題を解決するための手段】
【0007】
本願請求項1に記載の発明は、第1の閉領域の境界線の情報を記憶する第1の記憶手段と、前記第1の閉領域と境界線が交差する第2の閉領域の境界線の情報を記憶する第2の記憶手段と、分割領域の境界線の情報を記憶する第3の記憶手段と、前記第1の記憶手段から前記第2の閉領域との交点を所定の方向に前記第1の閉領域を周回するまで順に基点として読み出す読出手段と、前記読出手段で読み出した基点から前記第1の閉領域の境界線を所定の方向にたどって次の第2の閉領域の境界線との交点である第1の交点から第2の閉領域の境界線を時計方向と反時計方向にたどってそれぞれ基点から第1の交点を通り第2の交点を終点とする領域断片と基点から第1の交点を通り第3の交点を終点とする領域断片をそれぞれ求める領域断片取得手段と、前記領域断片取得手段で求めた2つの領域断片について前記領域断片の始点が前記第3の記憶手段に記憶されている分割領域の境界線のその時点での終点として登録されているか否か及び登録されている場合に該登録されている分割領域の境界線をたどった方向と前記領域断片が前記第2の閉領域をたどった方向が同じか否かを判定する判定手段と、前記判定手段によって基点が既に登録されていると判定され領域断片がたどった方向が分割領域の境界線がたどった方向であると判定された場合には該登録されている分割領域の境界線として前記領域断片を追加しそのほかの場合には前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する登録手段を有することを特徴とする領域分割装置である。
【0008】
本願請求項2に記載の発明は、請求項1に記載の領域分割装置の前記登録手段が、前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する際に、前記領域断片の基点から第1の交点までの前記第1の閉領域の境界線が前記第2の閉領域の内部か否か及び第1の交点から前記第2の閉領域の境界線をたどった方向により、当該分割領域が前記第1の閉領域と前記第2の閉領域との集合演算により定められる領域のいずれに属するかを示す領域種別を決定し、該領域種別を前記新たな分割領域に付加して登録することを特徴とする領域分割装置である。
【0009】
本願請求項3に記載の発明は、請求項1または請求項2に記載の領域分割装置の構成に加えて、さらに、前記第1の閉領域と前記第2の閉領域の交点を検出して前記第1の記憶手段及び第2の記憶手段に境界線の情報として記憶させる交点検出手段を有することを特徴とする領域分割装置である。
【0010】
本願請求項4に記載の発明は、請求項1ないし請求項3のいずれか1項に記載の領域分割装置の構成に加えて、さらに、前記第1の閉領域と前記第2の閉領域が交点を有するか否かを判定する交点判定手段と、前記交点判定手段が交点を有しないと判定した場合に包含処理を行う包含処理手段を有し、前記判定手段が交点を有すると判定した場合に前記読出手段、領域断片取得手段、判定手段、登録手段による処理を行い、前記包含処理手段は、前記第1の閉領域と前記第2の閉領域に重なりがない場合には前記第1の閉領域及び前記第2の閉領域を処理結果とし、一方の閉領域が内部に他方の閉領域を包含する場合には、前記一方の閉領域の前記他方の閉領域を除く領域を分割して、分割した各領域と前記他方の閉領域を処理結果とすることを特徴とする領域分割装置である。
【0011】
本願請求項5に記載の発明は、請求項1ないし請求項4のいずれか1項に記載の領域分割装置の構成に加えて、さらに、前記第3の記憶手段に登録された分割領域が接触点または接触線を含む場合に接触する点で分割領域を分割する接触点分割手段をさらに有することを特徴とする領域分割装置である。
【0012】
本願請求項6に記載の発明は、請求項1ないし請求項4のいずれか1項に記載の領域分割装置の構成に加えて、さらに、前記第1の閉領域と前記第2の閉領域が接触点を有する場合に2つの交点となるように前記第1の記憶手段に記憶されている前記第1の閉領域の境界線の情報または前記第2の記憶手段に記憶されている前記第2の閉領域の境界線の情報を変更する変更手段を有することを特徴とする領域分割装置である。
【0013】
本願請求項7に記載の発明は、コンピュータに、請求項1ないし請求項6のいずれか1項に記載の領域分割装置の機能を実行させることを特徴とする領域分割プログラムである。
【発明の効果】
【0014】
本願請求項1に記載の発明によれば、本発明の構成を用いない場合に比べて、簡単に、重なりを持つ複数の領域を、重なりのない複数の領域へ分割することができる。
【0015】
本願請求項2に記載の発明によれば、分割した各領域に対して第1の閉領域と第2の閉領域との集合演算により定められる領域のいずれに属するかを示す領域種別を簡単に付与することができる。
【0016】
本願請求項3に記載の発明によれば、本構成を有しない場合に比べて処理を高速化することができる。
【0017】
本願請求項4に記載の発明によれば、一方の閉領域が他方の閉領域に含まれている場合でも領域の分割を行うことができ、両者の重なりがない場合についても対応することができる。
【0018】
本願請求項5及び請求項6に記載の発明によれば、2つの閉領域の境界が接している場合についても、重なりのない複数の領域へ分割することができる。
【0019】
本願請求項7に記載の発明は、本願請求項1ないし請求項6のいずれか1項に記載の発明の効果と同等の効果を得ることができる。
【発明を実施するための最良の形態】
【0020】
図1は、本発明の第1の実施の形態を示すブロック図である。図中、11は記憶部、12は読出部、13は領域断片取得部、14は判定部、15は登録部である。ここでは、第1の閉領域Aと第2の閉領域Bとが重なりを有している場合に、閉領域Aと閉領域Bとの集合演算により定められる領域、すなわち、閉領域Aと閉領域Bの両方に含まれる領域、閉領域Aには含まれるが閉領域Bには含まれない領域、閉領域Bには含まれるが閉領域Aには含まれない領域に、それぞれが重ならないように分割する。3以上の閉領域が重なる場合には、2つの閉領域について分割した後、分割した各領域と別の閉領域との重なりをもとに分割処理を行ってゆけばよい。従って、2つの閉領域についての説明を行う。
【0021】
なお、閉領域Aと閉領域Bの一方が他方に完全に包含されることはないものとする。また、各閉領域の境界線がそれぞれ自分自身と途中で交差したり、内部に当該閉領域に含まれない領域が存在していないものとする。さらに、閉領域Aと閉領域Bの境界線が接する箇所はないものとする。これらの場合のいくつかについての対処は、別の実施の形態で述べる。
【0022】
記憶部11は、閉領域Aと閉領域Bの境界線の情報と、分割領域の境界線の情報を記憶する。各領域の境界線の情報は、境界線上のいくつかの点の情報により与えられる。点の間は、例えば直線や曲線で結ばれて境界線を構成する。なお、閉領域A及び閉領域Bの境界線の情報として、両者の境界線の交点の情報が与えられていると、後述するように境界線をたどって次の交点を見つける際に有用である。
【0023】
読出部12は、記憶部11から閉領域Aまたは閉領域Bのいずれか一方について、交点を所定の方向に周回するまで順に基点として読み出し、領域断片取得部13に渡す。ここでは閉領域Aについて、交点を時計回り方向に順に読み出して基点とする。最初の基点としては、ここでは閉領域B外に存在する閉領域Aの境界線が、閉領域Bと交差する2つの交点のうちの一方とする。このとき、他方の交点が、一方の交点から時計回り方向に存在する交点となるようにする。なお、確実にこのような条件を満たす最初の交点を見つけるため、例えば2つの閉領域のうち、特定の軸に関する座標値が最小あるいは最大となる点を特定し、その点を有する閉領域を閉領域A、もう一方の閉領域を閉領域Bとし、特定した点から閉領域Aの境界線を反時計回り方向にたどって得られる閉領域Bとの交点を最初の基点とすればよい。もちろん、この方法に限らず、最初の基点を決定してもよい。
【0024】
領域断片取得部13は、読出部12で読み出した基点から、ここでは閉領域Aの境界線を所定の方向にたどって次の第2の閉領域の境界線との交点である第1の交点を求め、さらにその第1の交点から閉領域Bの境界線を時計回り方向と反時計回り方向にたどって、それぞれ基点から第1の交点を通り第2の交点を終点とする領域断片と、基点から第1の交点を通り第3の交点を終点とする領域断片をそれぞれ求める。
【0025】
判定部14は、領域断片取得部13で求めた2つの領域断片について、領域断片の始点が記憶部11に分割領域境界線情報として記憶されている分割領域の境界線のその時点での終点として登録されているか否か、及び、登録されている場合には、その登録されている分割領域の境界線をたどった方向と、領域断片が閉領域Bをたどった方向が同じか否かを判定する。
【0026】
登録部15は、判定部14によって領域断片の始点が既に登録されていると判定され、領域断片が閉領域Bをたどった方向が分割領域の境界線がたどった方向であると判定された場合には、その登録されている分割領域の境界線として、分割領域境界線情報に領域断片を追加する。また、そのほかの場合には、領域断片を新たな分割領域の境界線として、分割領域境界線情報を記憶部11に登録する。新たな分割領域の登録を行う際には、当該分割領域が閉領域Aと閉領域Bとの集合演算により定められる領域のいずれに属するかを示す領域種別を付加する。この領域種別は、当該分割領域が閉領域A及び閉領域Bの両方に含まれるのか、閉領域Aに含まれるが閉領域Bには含まれないのか、閉領域Bに含まれるが閉領域Aには含まれないのか、あるいは閉領域Aにも閉領域Bにも含まれないのかを示すものである。付加する領域種別の決定は、分割領域の境界線として登録する領域断片の基点から第1の交点までの閉領域Aの境界線が閉領域Bの内部か否か、及び、第1の交点から閉領域Bの境界線をたどった方向により決定される。
【0027】
図2は、本発明の第1の実施の形態における動作の一例を示す流れ図である。なお、予め閉領域A境界線情報及び閉領域B境界線情報が記憶部11に記憶されているものとする。また、閉領域A境界線情報及び閉領域B境界線情報には、互いの交点が予め検出されているものとする。ここでは交点をa(i)とする。上述のように、交点a(i)は閉領域Aの時計回り方向に順に存在するものとする。また、最初の基点となる交点a(1)は、例えば2つの閉領域のうち、座標値が最小あるいは最大となる点を特定し、その点を有する閉領域を閉領域A、もう一方の閉領域を閉領域Bとし、特定した点から閉領域Aの境界線を反時計回り方向にたどって得られる閉領域Bとの交点をa(1)とすればよい。ここではこの交点a(1)から次の交点a(2)までの閉領域Aの境界線は閉領域Bの外部であるものとする。
【0028】
S31において、基点となる交点を指定する変数iを1とし、交点a(1)を最初の基点とする。読出部12は、この交点a(1)の情報を記憶部11から読み出して領域断片取得部13に渡す。
【0029】
S32において、領域断片取得部13は基点a(i)から閉領域Aの境界線を時計回り方向にたどって次の第2の閉領域の境界線との交点である第1の交点を求める。上述のように交点の情報が境界線情報として予め記憶されていれば、次の交点の情報は簡単に取得される。すなわち、基点a(i)の次の交点である第1の交点は、交点a(i+1)である。さらに領域断片取得部13は、その第1の交点a(i+1)から閉領域Bの境界線を時計回り方向と反時計回り方向にたどって、2つの領域断片を求める。基点から第1の交点を通り時計回り方向に閉領域Bの境界線をたどった領域断片をCR(i)、基点から第1の交点を通り反時計回り方向に閉領域Bの境界線をたどった領域断片をCL(i)とする。
【0030】
S33において、領域断片CR(i)、CL(i)の始点である基点a(i)が、分割領域の境界線のここまでの処理における終点として登録されているか否か、及び、登録されている場合にはその分割領域の境界線が閉領域Bをたどっている方向と領域断片が閉領域Bをたどっている方向が一致するか否かを判定部14で判定する。この条件を満たす領域断片については、S34において、登録部15は登録済みの分割領域の境界線の終点の後に、条件を満たす領域断片を追加して登録する。これにより、当該分割領域の終点は、追加された領域断片の終点である第2または第3の交点となるか、あるいは分割領域として境界線が周回する。
【0031】
S33の条件を満たさない場合には2つの領域断片について、あるいは一方の領域断片は条件を満たしてS34の処理を行った場合の他方の領域断片については、S35において登録部15は新たな分割領域の境界線の一部として各領域断片を新規登録する。登録の際には、対応する領域種別を付加する。
【0032】
図3は、領域種別の一例の説明図である。図3において、Acは閉領域A外を示し、Bcは閉領域B外を示している。すなわち、A∩Bは閉領域Aと閉領域Bの両方に含まれることを示し、A∩Bcは閉領域A内であるが閉領域B外であることを示し、Ac∩Bは閉領域B内であるが閉領域A外であることを示し、Ac∩Bcは閉領域Aにも閉領域Bにも含まれないことを示している。
【0033】
上述のように交点a(1)からa(2)までの閉領域Aの境界線が閉領域Bの外部であり、時計回り方向に閉領域Aの交点をたどって順に基点とする場合には、変数iの値と領域断片がCL(i)かCR(i)かにより、図3に示すような領域種別を付加する。すなわち、変数iが奇数のときの領域断片CL(i)については、閉領域Aに含まれるが閉領域Bには含まれない(A∩Bc)領域種別を付加し、領域断片CR(i)については、閉領域Aにも閉領域Bにも含まれない(Ac∩Bc)領域種別を付加する。また、変数iが偶数のときの領域断片CL(i)については、閉領域Bに含まれるが閉領域Aには含まれない(Ac∩B)領域種別を付加し、領域断片CR(i)については、閉領域Aと閉領域Bの両方に含まれる(A∩B)領域種別を付加する。
【0034】
ここでは交点a(1)からa(2)までの閉領域Aの境界線が閉領域Bの外部であるとしていることから、変数iが奇数であれば閉領域B外であり、変数iが偶数であれば、閉領域B内であると判定すればよい。これは、交点を通過すれば閉領域Bの内外が反転するからである。もちろん、最初の交点a(1)が閉領域Bの内部であれば変数iの値によって付加する領域種別は変わるし、閉領域Aの交点をたどる方向が違う場合も、付加する領域種別は変わる。しかし、これらの条件が決まれば、閉領域Bの内外と領域断片がCL(i)かCR(i)かによって付加する領域種別は決定される。
【0035】
図2に戻り、S36において、読出部12は次の交点a(i+1)が最初の基点a(1)であるか否かを判定し、交点a(i+1)が交点a(1)でない場合には、S37において変数iを1だけ増加させ、次の交点a(i)を基点として領域断片取得部13に渡し、S32へ戻って処理を続ける。
【0036】
このような処理を繰り返して行い、S36で交点a(i+1)が交点a(1)である場合には周回したものとして処理を終える。これまでの処理によって、分割領域の境界線の情報が記憶部11に分割領域境界線情報として登録されている。また、各分割領域には分割前の閉領域A,Bとの集合演算により定められる領域を示す領域種別が付加されている。例えば領域の重なりを考慮した描画処理を行う場合には、各分割領域について領域種別に従った描画処理を行えばよい。
【0037】
図4は、本発明の第1の実施の形態における動作の具体例の説明図、図5、図6は、分割領域境界線情報の変化の一例の説明図である。図4において、閉領域Aの境界線を実線で示し、閉領域Bの境界線を閉領域Aの境界線よりも太い線で示している。また、ここでは最初の基点を得るため閉領域Aの境界線上の点Pを求め、点Pから反時計回り方向に閉領域Aの境界線をたっどって最初に現れる閉領域Bとの交点をa(1)としている。この交点a(1)から閉領域Aの境界線を時計回り方向にたどって出現する閉領域Bとの交点をそれぞれa(2)〜a(6)としている。また、図5において時計回り方向をR、反時計回り方向をLとして示している。
【0038】
まず、交点a(1)を基点とする。そして、次の交点a(2)を第1の交点とし、この交点a(2)から閉領域Bを時計回り方向にたどって交点a(3)に至る領域断片CR(1)と、交点a(2)から閉領域Bを反時計回り方向にたどって交点a(5)に至る領域断片CL(1)を得る。まだ分割領域境界線情報は記憶部11に記憶されていないので、登録部15はこれらの領域断片CR(1)、CL(1)を新たな分割領域の境界線の一部として登録する。それぞれの新たな分割領域の領域種別は、図3に従って付与する。領域断片CR(1)を新たな分割領域の境界線の一部として登録した場合には領域種別としてAc∩Bcが、領域断片CL(1)を新たな分割領域の境界線の一部として登録した場合には領域種別としてA∩Bcが、それぞれ付加される。ここまでで登録された分割領域境界線情報の一例を図5(A)に示している。
【0039】
次に交点a(2)を基点とする。そして、次の交点a(3)を第1の交点とし、この交点a(3)から閉領域Bを時計回り方向にたどって交点a(4)に至る領域断片CR(2)と、交点a(3)から閉領域Bを反時計回り方向にたどって交点a(2)に至る領域断片CL(2)を得る。基点である交点a(2)を終点とする分割領域境界線情報は記憶部11に記憶されていないので、登録部15はこれらの領域断片CR(2)、CL(2)を新たな分割領域の境界線の一部として登録する。領域断片CR(2)を新たな分割領域の境界線の一部として登録した場合には領域種別としてA∩Bが、領域断片CL(2)を新たな分割領域の境界線の一部として登録した場合には領域種別としてAc∩Bが、それぞれ付加される。ここまでで登録された分割領域境界線情報の一例を図5(B)に示している。
【0040】
次に交点a(3)を基点とする。そして、次の交点a(4)を第1の交点とし、この交点a(4)から閉領域Bを時計回り方向にたどって交点a(1)に至る領域断片CR(3)と、交点a(4)から閉領域Bを反時計回り方向にたどって交点a(3)に至る領域断片CL(3)を得る。図5(B)の1行目に示すように、基点である交点a(3)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は時計回り方向である。従って、領域断片CR(3)を1行目の分割領域境界線情報に追加する。これにより、図5(C)の1行目のようになる。また、領域断片CL(3)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からA∩Bcが付加される。ここまでで登録された分割領域境界線情報の一例を図5(C)に示している。
【0041】
次に交点a(4)を基点とする。そして、次の交点a(5)を第1の交点とし、この交点a(5)から閉領域Bを時計回り方向にたどって交点a(2)に至る領域断片CR(4)と、交点a(5)から閉領域Bを反時計回り方向にたどって交点a(6)に至る領域断片CL(4)を得る。図5(C)の3行目に示すように、基点である交点a(4)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は時計回り方向である。従って、領域断片CR(4)を図5(C)の3行目の分割領域境界線情報に追加する。これにより、図5(D)の3行目のようになる。また、領域断片CL(4)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からAc∩Bが付加される。ここまでで登録された分割領域境界線情報の一例を図5(D)に示している。
【0042】
次に交点a(5)を基点とする。そして、次の交点a(6)を第1の交点とし、この交点a(6)から閉領域Bを時計回り方向にたどって交点a(5)に至る領域断片CR(5)と、交点a(6)から閉領域Bを反時計回り方向にたどって交点a(1)に至る領域断片CL(5)を得る。図5(D)の2行目に示すように、基点である交点a(5)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は反時計回り方向である。従って、領域断片CL(5)を図5(D)の2行目の分割領域境界線情報に追加する。これにより、図6(A)の2行目のようになる。また、領域断片CR(5)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からAc∩Bcが付加される。ここまでで登録された分割領域境界線情報の一例を図6(A)に示している。
【0043】
次に交点a(6)を基点とする。そして、次の交点a(1)を第1の交点とし、この交点a(1)から閉領域Bを時計回り方向にたどって交点a(6)に至る領域断片CR(6)と、交点a(1)から閉領域Bを反時計回り方向にたどって交点a(4)に至る領域断片CL(6)を得る。図6(A)の6行目に示すように、基点である交点a(6)を終点とする分割領域境界線情報が記憶部11に記憶されており、この方向は反時計回り方向である。従って、領域断片CL(6)を図6(A)の6行目の分割領域境界線情報に追加する。これにより、図6(B)の6行目のようになる。また、領域断片CR(6)は方向が異なるので新たな分割領域の境界線の一部として登録する。領域種別は図3からA∩Bが付加される。ここまでで登録された分割領域境界線情報の一例を図6(B)に示している。
【0044】
次の交点は交点a(1)である。閉領域Aを周回したので処理を終える。ここまでの処理で記憶部11に記憶されている分割領域境界線情報は図6(B)に示されており、それぞれが分割領域である。また、各分割領域には閉領域Aと閉領域Bとの集合演算により定められる領域を示す領域種別が付加されている。
【0045】
図7は、本発明の第2の実施の形態を示すブロック図である。図中、21は交点検出部、22は交点判定部、23は包含処理部、24は回転方向判定部、25は領域分割部、26は接触点分割部である。この第2の実施の形態では、上述の第1の実施の形態で示した構成により領域分割の処理を実行するための前処理と、一方の閉領域が他方の閉領域の内部に含まれている場合の処理を追加したものである。
【0046】
交点検出部21は、閉領域Aの境界線と閉領域Bの境界線の交点を検出して、その交点の情報を閉領域A境界線情報及び閉領域B境界線情報として追加して記憶部11に記憶させる。上述の第1の実施の形態における動作の一例の説明では、交点が閉領域A境界線情報及び閉領域B境界線情報に含まれているものとして説明しているが、交点検出部21はこの交点に関する情報を閉領域A境界線情報及び閉領域B境界線情報に追加するものである。
【0047】
交点判定部22は、閉領域Aと閉領域Bが交点を有するか否かを判定する。与えられた閉領域Aと閉領域Bとは、例えば重なる部分がない場合あるいは一方が他方の内部に存在する場合には交点を有しない。交点判定部22は、このような場合については後述する包含処理部23により分割の処理を行わせるためのものである。この交点判定部22が交点を有すると判定した場合に、領域分割部25による上述の第1の実施の形態で説明した領域分割の処理を行う。
【0048】
包含処理部23は、交点判定部22で閉領域Aと閉領域Bが交点を有しないと判定した場合に、包含処理を行う。閉領域Aと閉領域Bが交点を有しない場合としては、閉領域Aと閉領域Bに重なりがない場合と、いずれか一方の閉領域が内部に他方の閉領域を包含する場合である。閉領域Aと閉領域Bに重なりがない場合には、領域を分割する必要がないので、閉領域Aおよび閉領域Bのデータをそのまま処理結果とすればよい。一方の閉領域が内部に他方の閉領域を包含する場合には、一方の閉領域の他方の閉領域を除く領域を分割して、分割した各領域と他方の閉領域を処理結果とする。なお、包含処理部23で処理する場合には領域分割部25による分割処理は行わず、処理を効率化する。
【0049】
回転方向判定部24は、閉領域Aおよび閉領域Bの境界線を示す点列が時計回り方向に並べられているのか、あるいは反時計回り方向に並べられているのかを判定する。第1の実施の形態における動作の一例でも説明したように、いずれの方向に境界線をたどるかによって、新たに部分領域を登録する際に付加する領域種別が異なってくる。そのため、この回転方向判定部24において閉領域Aおよび閉領域Bの回転方向を判定しておく。あるいはさらに、所定の方向、例えば時計回り方向となるように点列を並べ直しておけばよい。
【0050】
領域分割部25は、上述の第1の実施の形態で示した読出部12、領域断片取得部13、判定部14、登録部15を有し、領域分割処理を行う。
【0051】
接触点分割部26は、領域分割部25で領域分割処理を行ったことにより得られた記憶部11に分割領域境界線情報として記憶されている各分割領域について、境界線が接触点または接触線を含む場合に、接触する点で分割領域をさらに分割する。あるいは、接触点または接触線を微少な距離だけ離した点または線を設定し、分割領域が接触点または接触線を含まないように変更してもよい。
【0052】
本発明の第2の実施の形態における動作の一例について説明してゆく。閉領域Aおよび閉領域Bの境界線を示す点列のデータが与えられると、このデータを閉領域A境界線情報および閉領域B境界線情報として記憶部11に記憶する。ここでは閉領域A境界線情報の一例として、例えば境界線上のn番目の点について、その点の参照用座標PXA0(n)、PYA0(n)、その点が交点かそれ以外の点かを示すフラグVTA(n)、交点の場合には閉領域Bの点と対応づける情報VNA(n)などを含んでいるものとする。閉領域B境界線情報についても、例えば境界線上のn番目の点について、その点の参照用座標PXB0(n)、PYB0(n)、その点が交点かそれ以外の点かを示す情報VTB(n)、交点の場合には閉領域Aの点と対応づける情報VNB(n)などを含んでいるものとする。
【0053】
図8は、交点検出部による交点検出処理の一例を示す流れ図である。ここでは、閉領域Aの境界線上の点列としてnA個の点が与えられ、また閉領域Bの境界線上の点列としてnB個の点が与えられているものとする。つまり、PXA0(n)、PYA0(n)(n=0,…,nA−1)及び、PXB0(n)、PYB0(n)(n=0,…,nB−1)が与えられているとする。これらの与えられた参照用座標をもとに、交点を加えてゆくための更新用座標PXA(n)、PYA(n)及び更新用座標PXB(n)、PYB(n)を用いる。なお、処理前はVTA(n)、VTB(n)は交点以外を示す情報が設定され、VNA(n)、VNB(n)には情報が設定されていない状態になっているものとし、交点の追加などにより更新用座標PXA(n)、PYA(n)及び更新用座標PXB(n)、PYB(n)を更新するのに合わせて、VTA(n)、VNA(n)、VTB(n),VNB(n)も更新してゆくものとする。
【0054】
S41において、閉領域Aの点列を選択するための変数nを初期値0に設定する。また、nA0=nA、nB0=nBとしてnAとnBの値をnA0,nB0に退避しておく。さらに、
PXA(i)=PXA0(i) (i=0,…,nA−1)
PYA(i)=PYA0(i) (i=0,…,nA−1)
PXB(i)=PXB0(i) (i=0,…,nB−1)
PYB(i)=PYB0(i) (i=0,…,nB−1)
で更新用座標を初期化する。更にまた、閉領域A上の点列更新用のカウンタcAを0で初期化し、閉領域B上の点列更新用のカウンタcB(i)をcB(i)=1(i=0,…,nB−1)で初期化する。
【0055】
S42において、閉領域Aの境界線上で変数nで示されるn番目の点(PXA0(n),PYA0(n))とn+1番目の点(PXA0(n+1),PYA0(n+1))とをつなぐ線分Cと、閉領域Bの境界線を示す各線分、すなわちm=0,…,nB0−1についてm番目の点(PXB0(m),PYB0(m))とm+1番目の点(PXB0(m+1),PYB0(m+1))とをつなぐ線分Dmとの交点を全て計算し、線分C上でn番目の点(PXA0(n),PYA0(n))に近い方から順に並べ替える。交点の数をk個とし、j番目(j=1,…,k)の交点の座標をCX(j)、CY(j)とし、閉領域Bにおいて交点が得られた線分Dmを特定するための情報をCN(j)=mとする。
【0056】
S43において、S42で交点が見つかったか否かを判定し、交点がない場合にはS50に進み、交点がk個(k≧1)ある場合にはS44〜S49の処理を行う。
【0057】
S44において、交点を特定する変数jを1に初期化した後、j番目の交点についての境界線情報を追加すべく、S45において閉領域A境界線情報を更新し、S46において閉領域B境界線情報を更新する。これらの閉領域A境界線情報及び閉領域B境界線情報の更新のため、まず、線分C上でPXA0(n)、PYA0(n)に近い側からj番目の交点が、それぞれ閉領域A、Bの境界線上において現状で何番目の点であるかを示す変数aと変数bを定める。具体的には、変数aにはcA+jを、また変数bにはΣi=1CN(j)+1cB(i)を設定する。なお、aは閉領域Aの境界線上で順に更新されていった番号でよいが、bは閉領域Aの境界線との交わりが発見されるごとに追加されるため、上記のような和の形で定義される。ここで求める変数bの値は、閉領域Bにおいて1番目からCN(j)+1番目までの、もともとの閉領域Bの点列の数と、既に得られている交点の数の合計値となる。これにより、当該交点が閉領域B上で他の交点を含めて何番目であるかがわかる。
【0058】
更に、cB(CN(j))>1の場合、つまり、閉領域Bの境界線上で(PXB0(CN(j)),PYB0(CN(j)))と(PXB0(CN(j)+1),PYB0(CN(j)+1))との間の交点が既に登録されている場合には、j番目の交点と既に登録されている交点が閉領域Bの境界線上でどの順番で現れるかによってbの値を変動させる。具体的には、l=bとして、(PXB0(CN(j)),PYB0(CN(j)))と(PXB(l),PYB(l))との閉領域Bの境界線上での長さと、(PXB0(CN(j)),PYB0(CN(j)))と(CX(j),CY(j))との閉領域Bの境界線上での長さとを比較し、前者の長さが後者の長さより小さくなるまでlから1を引いて再び比較を繰り返す。このようにして閉領域Bの境界線上でb番目の交点から交点を1つずつ戻りながら、閉領域Bの境界線上での交点が存在する位置(どの点の間にあるか)を特定する。その後に、bにl+1を代入しなおす。
【0059】
そしてS45における閉領域A境界線情報の更新においては、a番目以降の境界線の点列の情報を1つ分シフトするため、
PXA(i)=PXA(i−1) (i=a+1,…,nA+j)
PYA(i)=PYA(i−1) (i=a+1,…,nA+j)
VTA(i)=VTA(i−1) (i=a+1,…,nA+j)
VNA(i)=VNA(i−1)+p (i=a+1,…,nA+j)
を行う。ここでpは、VNA(i−1)<bならば0とし、VNA(i−1)≧bならば1とする。なお、後者は閉領域Aの境界線上においてa番目に新しい交点を加える際に、閉領域Bの境界線上でより後段側にある点の参照番号が1つ後ろにずれることを意味している。
【0060】
そして、a番目に交点の情報を追加挿入する。すなわち、
PXA(a)=CX(j)
PYA(a)=CY(j)
VTA(a)=1(交点を示す)
VNA(a)=b(閉領域Bのb番目の交点と対応することを示す)
を行う。更に、cB(CN(j))に1を加える。
【0061】
また、S46における閉領域B境界線情報の更新においては、b番目以降の境界線の点列の情報を1つ分シフトするため、
PXB(i)=PXB(i−1) (i=b+1,…,nB+j)
PYB(i)=PYB(i−1) (i=b+1,…,nB+j)
VTB(i)=VTB(i−1) (i=b+1,…,nB+j)
VNB(i)=VNB(i−1)+p (i=b+1,…,nB+j)
を行う。ここでpは、VNB(i−1)<aならば0とし、VNB(i−1)≧aならば1とする。なお、後者は閉領域Bの境界線上においてb番目に新しい交点を加える際に、閉領域Aの境界線上でより後段側にある点の参照番号が1つ後ろにずれることを意味している。
【0062】
そして、b番目に交点の情報を追加挿入する。すなわち、
PXB(b)=CX(j)
PYB(b)=CY(j)
VTB(b)=1(交点を示す)
VNB(b)=a(閉領域Aのa番目の交点と対応することを示す)
を行う。これにより、1つの交点の情報が各境界線情報に追加される。
【0063】
S47において、変数jに1を加え、S48において、jがkを超えたか否かを判定する。変数jの値がkを超えていなければ、未処理の交点が残っているのでS45へ戻って次の交点を追加する処理を行う。変数jの値がkを超えたら、交点の追加が終了しているのでS49に進む。
【0064】
S49において、交点を加えたことによる点列の数の更新を行う。すなわち、nA及びnBにkを加えるとともに、点列更新用のカウンタcAにk+1を加える。
【0065】
S50において、変数nに1を加え、S51において、閉領域Aを周回したか否かを判定する。S51の判定は、変数nの値がnA0に達したか否かを判定すればよい。変数nの値がnA0に達していなければ、S42へ戻って閉領域Aの境界線を構成する次の線分と閉領域Bとの交点を見つける処理を行う。変数nがnA0に達していれば、閉領域Aを周回したので、処理を終了する。この処理によって、閉領域A境界線情報及び閉領域B境界線情報として、両者の交点を含めた点列の情報が記憶されることになる。
【0066】
なお、閉領域A及び閉領域Bの境界線は直線による折れ線で構成されていなくてもよく、例えばベジエ曲線などの曲線で構成されていてもよい。境界線が曲線で構成されている場合には、曲線間の近似交点を求めてもよいし、あるいは、曲線を直線による折れ線で近似して交点を求め、近似してもよい。
【0067】
交点判定部22では、上述の交点検出部21による処理の際に、交点を検出したか否かを示す情報を受け取って、閉領域Aと閉領域Bとが交点を有するか否かを判定すればよい。あるいは、記憶部11に記憶されている閉領域A境界線情報あるいは閉領域B境界線情報を順に読み出して交点として登録されている点があるか否かを判定してもよい。
【0068】
交点判定部22で交点がないと判定された場合には、領域分割部25が分割処理を行わずに、処理が簡単な包含処理部23による包含処理を行う。図9は、包含処理部における包含処理の一例を示す流れ図、図10は、包含処理部における包含処理の具体例の説明図である。まずS61において、閉領域Aと閉領域Bとの包含関係を判定するため、ある特定の点を閉領域A及び閉領域Bから求める。特定の点としては、例えば最小の点や最大の点などを求めるとよい。ここでは一例としてx座標が最小の点をそれぞれ求めることとし、閉領域Aのx座標が最小の点をa、閉領域Bのx座標が最小の点をbとする。
【0069】
S62において、直線x=aと閉領域Bとの交点が、直線x=aにおいて点aを挟んで両側に存在するか否かを判定する。両側に存在する場合には、閉領域Bが閉領域Aを内部に含むことを示している。この場合には、S63において、閉領域Bのうち閉領域Aに含まれない部分を分割し、分割した複数の領域と閉領域Aを処理結果とする。分割する位置は閉領域Aの境界線を含むように分割するとよい。例えば直線x=aあるいは直線x=a+αで分割すると簡単である。
【0070】
S62で直線x=aと閉領域Bの交点がない場合や、交点があっても点aを挟むように存在しない場合には、さらにS64において、直線x=bと閉領域Aとの交点が、直線x=bにおいて点bを挟んで両側に存在するか否かを判定する。両側に存在する場合には、閉領域Aが閉領域Bを内部に含むことを示している。この場合には、S65において、閉領域Aのうち閉領域Bに含まれない部分を分割し、分割した複数の領域と閉領域Bを処理結果とする。分割する位置は閉領域Bの境界線を含むように分割するとよい。例えば直線x=bあるいは直線x=b+αで分割すると簡単である。
【0071】
S64でも直線x=bと閉領域Aの交点がない場合や、交点があっても点bを挟むように存在しない場合には、いずれか一方が他方を含む関係にはないものと判断できる。この場合には、閉領域Aと閉領域Bをそのまま処理結果とすればよい。
【0072】
例えば図10(A)に示した例では、直線x=aは交点を持たないためS62からS64へ移り、直線x=bと閉領域Aとの交点を求めると、点bを挟んで両側に交点を有している。従って、閉領域Aが閉領域Bを内部に含むと判断し、S65において、閉領域Aの閉領域B以外の部分を分割する。この例では、直線x=b+αで分割した例を図10(B)に示している。このように分割しておけば、分割領域はそれぞれ数学的に同位相の閉領域となるため、さらに他の閉領域との重なりに応じた分割処理を行う場合でも支障はない。
【0073】
交点判定部22で交点がないと判定された場合には、領域分割部25が分割処理を行うが、上述のように新たに部分領域を登録する際に付加する領域種別を決定する際に、各閉領域の境界線を示す点列の回転方向を求めておくとよい。その判定を回転方向判定部24で行っておく。なお、領域種別を付加せずに領域分割を行う場合には、回転方向判定部24は不要である。
【0074】
図11は、回転方向判定部における回転方向の判定処理の一例を示す流れ図、図12は、同じく具体例の説明図である。S71において、閉領域の境界線上の特定の点を選択する。特定の点としては、ここではx座標の値が最も小さい点のうち、y座標の値が最も小さい点aを選択する。S72において、閉領域の境界線を構成する点列から点aの一つ後の点bを取得する。またS73において、閉領域の境界線を構成する点列から点aの一つ前の点cを取得する。
【0075】
S74において、点aと点bを通る直線上で点aから点bに向かう方向から見て右側に点cが存在するのか、左側に点cが存在するのかを判定する。点aから点bへ向かう方向から見て右側に点cが存在する場合には、S75において、当該閉領域は時計回り方向と判定する。また、点aから点bへ向かう方向から見て左側に点cが存在する場合には、S76において、当該閉領域は反時計回り方向と判定する。
【0076】
図12(A)に示す例では、点aから点bへ向かう方向から見て左側に点cが存在するので、反時計回り方向と判定される。図12(B)に示す場合にも、点aから点bへ向かう方向から見て左側に点cが存在するが、実際には時計回り方向である。この場合、S71において点aを選択する際のx座標値が最小であるという条件を満たしていないので、図12(B)に示すような不都合は生じない。
【0077】
このようにして回転方向判定部24によって各閉領域の境界線を示す点列の回転方向がわかる。この回転方向に従って領域分割部25による分割処理により各分割領域に付加する領域種別を変更したり、あるいは、回転方向を統一して点列を並べ替えてから領域分割部25による分割処理を行えばよい。領域分割部25による分割処理は第1の実施の形態において説明した通りである。
【0078】
領域分割部25による分割処理では、接触点や接触線は交点ではないため境界線上の1点として扱われる。そのため、領域分割部25で分割された分割領域では、接触点や接触線がそのまま残った状態となっている。もちろんこのまま処理結果としてもよいが、例えば領域分割後に半透明処理を行う場合などでは、接触点あるいは接触線では塗りつぶしを行う面積がないため、不具合を生じかねない。そのため、ここでは接触点分割部26によって接触点または接触線で分割領域をさらに分割する。
【0079】
図13は、接触点分割部26による分割処理の一例を示す流れ図である。この処理は、処理結果として得られている各領域について、それぞれを処理対象として行う。S81において、処理対象の領域は接触点あるいは接触線を含むか否かを判定し、含まなければその処理対象の領域に対する接触点分割部26の処理は終了する。
【0080】
接触点あるいは接触線を含んでいる場合には、S82において、処理対象の領域の境界線上の点pを特定する。この点pは任意に特定すればよいが、ここではx座標の値が最小となる点を点pとする。
【0081】
S83において、処理対象の領域の境界線上にある接触点のうち、点pを挟む接触点を点a(1)、点a(2)とし、この点a(1)から点a(2)の方向に処理対象の領域の境界線をたどって接触点に番号を付与し、番号iにより特定される接触点を点a(i)とする。接触点では、境界線をたどると行きと帰りで2回の番号付けがなされることになる。なお、接触線では、その始点と終点を接触点とする。
【0082】
S84において、変数iを1に初期化し、S85において、点a(i)と次の点a(i+1)とが1つの接触点に番号付けしたものであるか否かを判定する。1つの接触点に番号付けした点である場合には、S86において、点a(i)から点a(i+1)までにより境界線が構成される領域を1つの分割領域とする。
【0083】
また、点a(i)と点a(i+1)が異なる接触点のものである場合には、S87において、点a(i)から点a(i+1)までと、1つの接触点に点a(i+1)とともに付与されている番号を有する点a(t)から次の点a(t+1)までにより境界線が構成される領域を1つの分割領域とする。なお、接触線の部分については分割領域とはしない。
【0084】
S86あるいはS87の処理の後、S88において、点a(i)と次の点a(i+1)とが1つの接触点に番号付けしたものとの判定が2回行われたか否かを判定し、2回行われた場合には処理を終了する。0回または1回であればS89において、変数iに1を加えてS85へ戻り、次の点についての処理を行う。
【0085】
図14は、接触点における分割処理の具体例の説明図である。例えば図14(A)に示すような閉領域A及び閉領域Bが与えられた場合には、領域分割部25によって図14(B)に示すような分割領域a,b,c,dが得られる。このうち分割領域aは接触点を有している。そのため、接触点分割部26によって図14(C)に示すように分割領域aを分割領域e,fに分割する。
【0086】
図15は、接触点における分割処理の別の具体例の説明図である。図14では接触点を有する簡単な例を示したが、図13に示す処理では、より複雑な例に対応している。図15(A)に示した分割領域の例では、接触点が2つと接触線が1つ含まれている。このような場合に、図13の処理に従いS82で点pを特定し、S83で各接触点に番号を付与してゆく。これによって図15(B)に示すように点p及び各点a(i)(i=1,…,8)が得られる。
【0087】
まずi=1とし、点a(1)と点a(2)は1つの接触点に対して番号が付与された点であるから、S86において、点a(1)から点a(2)へ至る境界線で構成される領域を1つの分割領域とする。これを図15(C)に示している。
【0088】
次にi=2とし、点a(2)と点a(3)を参照すると、異なる接触点であるので、S87において、点(2)から点a(3)までと、1つの接触点に点a(3)とともに付与されている番号を有する点a(8)から次の点a(1)までにより境界線が構成される領域を1つの分割領域とする。これを図15(D)に示している。
【0089】
さらにi=3とし、点a(3)と点a(4)を参照すると、異なる接触点であるので、S87における処理を行うが、この部分は接触線の部分であるので分割領域とはせずに次に進む。
【0090】
i=4とし、点a(4)と点a(5)を参照すると、異なる接触点であるので、S87において、点(4)から点a(5)までと、1つの接触点に点a(5)とともに付与されている番号を有する点a(6)から次の点a(7)までにより境界線が構成される領域を1つの分割領域とする。これを図15(E)に示している。
【0091】
i=5として点a(5)と点a(6)を参照すると、点a(5)と点a(6)は1つの接触点に対して番号が付与された点であるから、S86において、点a(5)から点a(6)へ至る境界線で構成される領域を1つの分割領域とする。これを図15(F)に示している。
【0092】
このi=5において、点a(i)と次の点a(i+1)とが1つの接触点に番号付けしたものとの判定が2回(i=1とi=5の場合)行われたので、これで接触点に関する分割処理を終える。この処理によって、図15(A)に示した接触点及び接触線を含む分割領域は、図15(C)、(D)、(E)、(F)に示した4つの領域に分割される。
【0093】
上述のように、この接触点及び接触線における分割処理は行わなくてもよい。あるいは、分割する代わりに接触点及び接触線で接触しないように境界線を構成することも可能である。すなわち、接触点を微少な距離だけ離した複数の点で近似したり、接触線を微少な間隔を有する複数の線で近似すればよい。
【0094】
あるいは、交点検出部21で交点を検出する際に、1つの接触点を微少な間隔を有する2つの交点として登録し、また接触線については両端を交点として登録すれば、領域分割部25において接触点の部分で分割された分割領域が得られる。なお、この場合には接触点を2つ交点としたことにより微少な分割領域が生成されるが、この微少な分割領域は後で削除すればよい。
【0095】
図16は、本発明の各実施の形態の機能をコンピュータプログラムで実現した場合におけるコンピュータプログラム及びそのコンピュータプログラムを格納した記憶媒体とコンピュータの一例の説明図である。図中、101はプログラム、102はコンピュータ、111は光磁気ディスク、112は光ディスク、113は磁気ディスク、114はメモリ、121はCPU、122は内部メモリ、123は読取部、124はハードディスク、125はインタフェース、126は通信部である。
【0096】
上述の本発明の各実施の形態で説明した各部の機能の一部または全部を、コンピュータにより実行可能なプログラム101によって実現してもよい。その場合、そのプログラム101およびそのプログラムが用いるデータなどは、コンピュータが読み取り可能な記憶媒体に記憶させておいてもよい。記憶媒体とは、コンピュータのハードウェア資源に備えられている読取部123に対して、プログラムの記述内容に応じて、磁気、光、電気等のエネルギーの変化状態を引き起こして、それに対応する信号の形式で、読取部123にプログラムの記述内容を伝達できるものである。例えば、光磁気ディスク111,光ディスク112(CDやDVDなどを含む)、磁気ディスク113,メモリ114(ICカード、メモリカードなどを含む)等である。もちろんこれらの記憶媒体は、可搬型に限られるものではない。
【0097】
これらの記憶媒体にプログラム101を格納しておき、例えばコンピュータ102の読取部123あるいはインタフェース125にこれらの記憶媒体を装着することによって、コンピュータからプログラム101を読み出し、内部メモリ122またはハードディスク124に記憶し、CPU121によってプログラム101を実行することによって、各実施の形態で説明した機能が実現される。あるいは、ネットワークなどを介してプログラム101をコンピュータ102に転送し、コンピュータ102では通信部126でプログラム101を受信して内部メモリ122またはハードディスク124に記憶し、CPU121によってプログラム101を実行することによって、各実施の形態で説明した機能を実現してもよい。なお、コンピュータ102には、このほかインタフェース125を介して様々な装置と接続してもよい。また、例えば記憶部11はハードディスク124や内部メモリ122により構成すればよい。
【0098】
もちろん、一部の機能についてハードウェアによって構成してもよいし、すべてをハードウェアで構成してもよい。あるいは、他の構成とともに本発明も含めたプログラムとして構成してもよい。例えば描画処理を行うプログラムとともに構成し、画像形成装置や表示装置に対して描画した画像を出力するように構成してもよい。もちろん、他の用途に適用する場合には、その用途におけるプログラムと一体化してもよい。
【図面の簡単な説明】
【0099】
【図1】本発明の第1の実施の形態を示すブロック図である。
【図2】本発明の第1の実施の形態における動作の一例を示す流れ図である。
【図3】領域種別の一例の説明図である。
【図4】本発明の第1の実施の形態における動作の具体例の説明図である。
【図5】分割領域境界線情報の変化の一例の説明図である。
【図6】分割領域境界線情報の変化の一例の説明図(続き)である。
【図7】本発明の第2の実施の形態を示すブロック図である。
【図8】交点検出部による交点検出処理の一例を示す流れ図である。
【図9】包含処理部における包含処理の一例を示す流れ図である。
【図10】包含処理部における包含処理の具体例の説明図である。
【図11】回転方向判定部における回転方向の判定処理の一例を示す流れ図である。
【図12】回転方向判定部における回転方向の判定処理の具体例の説明図である。
【図13】回転方向判定部における回転方向の判定処理の具体例の説明図である。
【図14】接触点における分割処理の具体例の説明図である。
【図15】接触点における分割処理の別の具体例の説明図である。
【図16】本発明の各実施の形態の機能をコンピュータプログラムで実現した場合におけるコンピュータプログラム及びそのコンピュータプログラムを格納した記憶媒体とコンピュータの一例の説明図である。
【図17】領域分割の一例の説明図である。
【符号の説明】
【0100】
11…記憶部、12…読出部、13…領域断片取得部、14…判定部、15…登録部、21…交点検出部、22…交点判定部、23…包含処理部、24…回転方向判定部、25…領域分割部、26…接触点分割部、101…プログラム、102…コンピュータ、111…光磁気ディスク、112…光ディスク、113…磁気ディスク、114…メモリ、121…CPU、122…内部メモリ、123…読取部、124…ハードディスク、125…インタフェース、126…通信部。
【特許請求の範囲】
【請求項1】
第1の閉領域の境界線の情報を記憶する第1の記憶手段と、前記第1の閉領域と境界線が交差する第2の閉領域の境界線の情報を記憶する第2の記憶手段と、分割領域の境界線の情報を記憶する第3の記憶手段と、前記第1の記憶手段から前記第2の閉領域との交点を所定の方向に前記第1の閉領域を周回するまで順に基点として読み出す読出手段と、前記読出手段で読み出した基点から前記第1の閉領域の境界線を所定の方向にたどって次の第2の閉領域の境界線との交点である第1の交点から第2の閉領域の境界線を時計方向と反時計方向にたどってそれぞれ基点から第1の交点を通り第2の交点を終点とする領域断片と基点から第1の交点を通り第3の交点を終点とする領域断片をそれぞれ求める領域断片取得手段と、前記領域断片取得手段で求めた2つの領域断片について前記領域断片の始点が前記第3の記憶手段に記憶されている分割領域の境界線のその時点での終点として登録されているか否か及び登録されている場合に該登録されている分割領域の境界線をたどった方向と前記領域断片が前記第2の閉領域をたどった方向が同じか否かを判定する判定手段と、前記判定手段によって基点が既に登録されていると判定され領域断片がたどった方向が分割領域の境界線がたどった方向であると判定された場合には該登録されている分割領域の境界線として前記領域断片を追加しそのほかの場合には前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する登録手段を有することを特徴とする領域分割装置。
【請求項2】
前記登録手段は、前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する際に、前記領域断片の基点から第1の交点までの前記第1の閉領域の境界線が前記第2の閉領域の内部か否か及び第1の交点から前記第2の閉領域の境界線をたどった方向により、当該分割領域が前記第1の閉領域と前記第2の閉領域との集合演算により定められる領域のいずれに属するかを示す領域種別を決定し、該領域種別を前記新たな分割領域に付加して登録することを特徴とする請求項1に記載の領域分割装置。
【請求項3】
さらに、前記第1の閉領域と前記第2の閉領域の交点を検出して前記第1の記憶手段及び第2の記憶手段に境界線の情報として記憶させる交点検出手段を有することを特徴とする請求項1または請求項2に記載の領域分割装置。
【請求項4】
さらに、前記第1の閉領域と前記第2の閉領域が交点を有するか否かを判定する交点判定手段と、前記交点判定手段が交点を有しないと判定した場合に包含処理を行う包含処理手段を有し、前記判定手段が交点を有すると判定した場合に前記読出手段、領域断片取得手段、判定手段、登録手段による処理を行い、前記包含処理手段は、前記第1の閉領域と前記第2の閉領域に重なりがない場合には前記第1の閉領域及び前記第2の閉領域を処理結果とし、一方の閉領域が内部に他方の閉領域を包含する場合には、前記一方の閉領域の前記他方の閉領域を除く領域を分割して、分割した各領域と前記他方の閉領域を処理結果とすることを特徴とする請求項1ないし請求項3のいずれか1項に記載の領域分割装置。
【請求項5】
さらに、前記第3の記憶手段に登録された分割領域が接触点または接触線を含む場合に接触する点で分割領域を分割する接触点分割手段をさらに有することを特徴とする請求項1ないし請求項4のいずれか1項に記載の領域分割装置。
【請求項6】
さらに、前記第1の閉領域と前記第2の閉領域が接触点を有する場合に2つの交点となるように前記第1の記憶手段に記憶されている前記第1の閉領域の境界線の情報または前記第2の記憶手段に記憶されている前記第2の閉領域の境界線の情報を変更する変更手段を有することを特徴とする請求項1ないし請求項4のいずれか1項に記載の領域分割装置。
【請求項7】
コンピュータに、請求項1ないし請求項6のいずれか1項に記載の領域分割装置の機能を実行させることを特徴とする領域分割プログラム。
【請求項1】
第1の閉領域の境界線の情報を記憶する第1の記憶手段と、前記第1の閉領域と境界線が交差する第2の閉領域の境界線の情報を記憶する第2の記憶手段と、分割領域の境界線の情報を記憶する第3の記憶手段と、前記第1の記憶手段から前記第2の閉領域との交点を所定の方向に前記第1の閉領域を周回するまで順に基点として読み出す読出手段と、前記読出手段で読み出した基点から前記第1の閉領域の境界線を所定の方向にたどって次の第2の閉領域の境界線との交点である第1の交点から第2の閉領域の境界線を時計方向と反時計方向にたどってそれぞれ基点から第1の交点を通り第2の交点を終点とする領域断片と基点から第1の交点を通り第3の交点を終点とする領域断片をそれぞれ求める領域断片取得手段と、前記領域断片取得手段で求めた2つの領域断片について前記領域断片の始点が前記第3の記憶手段に記憶されている分割領域の境界線のその時点での終点として登録されているか否か及び登録されている場合に該登録されている分割領域の境界線をたどった方向と前記領域断片が前記第2の閉領域をたどった方向が同じか否かを判定する判定手段と、前記判定手段によって基点が既に登録されていると判定され領域断片がたどった方向が分割領域の境界線がたどった方向であると判定された場合には該登録されている分割領域の境界線として前記領域断片を追加しそのほかの場合には前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する登録手段を有することを特徴とする領域分割装置。
【請求項2】
前記登録手段は、前記領域断片を新たな分割領域の境界線として前記第3の記憶手段に登録する際に、前記領域断片の基点から第1の交点までの前記第1の閉領域の境界線が前記第2の閉領域の内部か否か及び第1の交点から前記第2の閉領域の境界線をたどった方向により、当該分割領域が前記第1の閉領域と前記第2の閉領域との集合演算により定められる領域のいずれに属するかを示す領域種別を決定し、該領域種別を前記新たな分割領域に付加して登録することを特徴とする請求項1に記載の領域分割装置。
【請求項3】
さらに、前記第1の閉領域と前記第2の閉領域の交点を検出して前記第1の記憶手段及び第2の記憶手段に境界線の情報として記憶させる交点検出手段を有することを特徴とする請求項1または請求項2に記載の領域分割装置。
【請求項4】
さらに、前記第1の閉領域と前記第2の閉領域が交点を有するか否かを判定する交点判定手段と、前記交点判定手段が交点を有しないと判定した場合に包含処理を行う包含処理手段を有し、前記判定手段が交点を有すると判定した場合に前記読出手段、領域断片取得手段、判定手段、登録手段による処理を行い、前記包含処理手段は、前記第1の閉領域と前記第2の閉領域に重なりがない場合には前記第1の閉領域及び前記第2の閉領域を処理結果とし、一方の閉領域が内部に他方の閉領域を包含する場合には、前記一方の閉領域の前記他方の閉領域を除く領域を分割して、分割した各領域と前記他方の閉領域を処理結果とすることを特徴とする請求項1ないし請求項3のいずれか1項に記載の領域分割装置。
【請求項5】
さらに、前記第3の記憶手段に登録された分割領域が接触点または接触線を含む場合に接触する点で分割領域を分割する接触点分割手段をさらに有することを特徴とする請求項1ないし請求項4のいずれか1項に記載の領域分割装置。
【請求項6】
さらに、前記第1の閉領域と前記第2の閉領域が接触点を有する場合に2つの交点となるように前記第1の記憶手段に記憶されている前記第1の閉領域の境界線の情報または前記第2の記憶手段に記憶されている前記第2の閉領域の境界線の情報を変更する変更手段を有することを特徴とする請求項1ないし請求項4のいずれか1項に記載の領域分割装置。
【請求項7】
コンピュータに、請求項1ないし請求項6のいずれか1項に記載の領域分割装置の機能を実行させることを特徴とする領域分割プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2009−80725(P2009−80725A)
【公開日】平成21年4月16日(2009.4.16)
【国際特許分類】
【出願番号】特願2007−250655(P2007−250655)
【出願日】平成19年9月27日(2007.9.27)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】
【公開日】平成21年4月16日(2009.4.16)
【国際特許分類】
【出願日】平成19年9月27日(2007.9.27)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】
[ Back to top ]