(57)【特許請求の範囲】
【請求項１】
所定の線分のデータに対応するラスタライズパターンを当該所定の線分のデータと関連付けて記憶するデータベースを記憶する記憶手段と、
円の少なくとも一部を表すベクトルデータを取得する取得手段と、
前記取得されたベクトルデータに基づいて、前記円の少なくとも一部を近似する複数の線分のデータを生成する生成手段と、
前記円の大きさが所定の大きさ以下であるかを判定する判定手段と、
前記円の大きさが前記所定の大きさ以下であると判定される場合に、前記生成手段によって生成された前記複数の線分のデータそれぞれについて、前記記憶されたデータベースを用いて当該線分のデータに対応するラスタライズパターンを取得して、当該取得されたラスタライズパターンに従って当該線分をラスタライズすることで、前記円の少なくとも一部を描画する第１の描画手段と、
前記円の大きさが前記所定の大きさを超えると判定される場合に、前記生成手段によって生成された前記複数の線分のデータそれぞれについて、前記記憶されたデータベースを用いずに当該線分とスキャンラインとの交点の座標を演算して当該線分をラスタライズすることで、前記円の少なくとも一部を描画する第２の描画手段と、
を有することを特徴とする画像描画装置。
【請求項２】
前記生成手段は、
前記円の大きさが第１の大きさ以下であるかを判定する手段と、
前記円の大きさが前記第１の大きさ以下であると判定される場合に、円の大きさに係る情報に対して分割数に係る情報が予め登録された第１の記憶領域を参照することで前記円の分割数を求め、前記求められた分割数で前記円を分割することにより得られる複数の線分のデータを、分割数に係る情報に対して端点の位置に係る情報が予め登録された第２の記憶領域を参照することで生成する第１の生成手段と、
前記円の大きさが第１の大きさを超えると判定される場合に、前記円の少なくとも一部を近似する複数の曲線を求め、前記複数の曲線それぞれを複数の線分で近似することで、前記円の少なくとも一部を近似する前記複数の線分のデータを生成する第２の生成手段と、
を有することを特徴とする請求項１に記載の画像描画装置。
【請求項３】
前記第２の記憶領域には、予め定められているＭ個の分割数に係る情報に対して端点の位置に係る情報が登録されており、
前記第１の生成手段は、前記求められた分割数であるＮがＭよりも小さい場合には、Ｍ／Ｎの間隔で、前記第２の記憶領域に登録されている端点の位置に係る情報を読み出すことを特徴とする請求項２に記載の画像描画装置。
【請求項４】
前記第２の記憶領域には、分割数に応じた端点の位置であって、円の一部分に対応する端点の位置に係る情報が登録されており、
前記第１の生成手段は、前記第２の記憶領域に登録されていない円の他の部分に対応する端点の位置に係る情報を、前記第２の記憶領域に登録されている情報を用いて導出することを特徴とする請求項２又は３に記載の画像描画装置。
【請求項５】
前記線分のデータは、前記線分の両端点の相対的な位置関係を示すデータであり、
前記データベースには、線分の両端点の相対的な位置関係に対応する当該線分のラスタライズパターンであって、円の一部分に対応する当該線分のラスタライズパターンに係る情報が登録されており、
前記第１の描画手段は、前記データベースに登録されていない円の他の部分に対応する直線のラスタライズパターンに係る情報を、前記データベースに登録されている情報を用いて導出することを特徴とする請求項１〜４の何れか１項に記載の画像描画装置。
【請求項６】
所定の線分のデータに対応するラスタライズパターンを当該所定の線分のデータと関連付けて記憶するデータベースを記憶する記憶工程と、
円の少なくとも一部を表すベクトルデータを取得する取得工程と、
前記取得されたベクトルデータに基づいて、前記円の少なくとも一部を近似する複数の線分のデータを生成する生成工程と、
前記円の大きさが所定の大きさ以下であるかを判定する判定工程と、
前記円の大きさが前記所定の大きさ以下であると判定される場合に、前記生成工程によって生成された前記複数の線分のデータそれぞれについて、前記記憶されたデータベースを用いて当該線分のデータに対応するラスタライズパターンを取得して、当該取得されたラスタライズパターンに従って当該線分をラスタライズすることで、前記円の少なくとも一部を描画する第１の描画工程と、
前記円の大きさが前記所定の大きさを超えると判定される場合に、前記生成工程によって生成された前記複数の線分のデータそれぞれについて、前記記憶されたデータベースを用いずに当該線分とスキャンラインとの交点の座標を演算して当該線分をラスタライズすることで、前記円の少なくとも一部を描画する第２の描画工程と、
を有することを特徴とする画像描画方法。
【請求項７】
請求項１〜５の何れか１項に記載の各手段としてコンピュータを機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像描画装置、画像描画方法、及びコンピュータプログラムに関し、特に、真円の全部または一部を描画するために用いて好適なものである。
【背景技術】
【０００２】
ベクトル形式で記述されている図形データ等を表示装置に表示するためには、与えられたベクトルデータを、論理データから計算される「表示装置における座標」に変換し、描画するレンダリング処理が必要となる。従来から、ベクトルデータ（各図形データ）の処理に関する効率化の提案がなされている。特許文献１では、円を含む曲線の分割間隔を当該曲線の領域により変更することで滑らかに曲線を描画する手法が提示されている。また、特許文献２では、線分の描画について、線分自身の線幅、傾き、形状等の描画属性によって最適な処理を選択し、効率化を図る手法が提示されている。
【０００３】
また、真円（以下、円図形と称する）の描画に着目した場合、従来は、ベクトルデータで与えられる円図形を表示装置に描画するために、まず円図形をベジエ曲線等の曲線ベクトルで近似する。そのため、円図形の半径を用いて曲線ベクトルでの近似数（分割数）を計算する。次に、特許文献３で示されているように、計算した分割数（分割点）に応じて、各曲線を描画するための制御点を求めて、円図形を曲線ベクトルデータの組合せに分割する。次に、特許文献４で示されているように、各曲線の曲線ベクトルデータを複数個の直線ベクトルデータに分割する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−２９７７４７号公報
【特許文献２】特開平１０−１１５９２号公報
【特許文献３】特開平７−１６８９４５号公報
【特許文献４】特開平１１−５８８７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、前述した従来の手法では、描画する円図形のサイズに依らず一律に前述の曲線分割処理と、直線分割処理とが行われる。そのため、例えば、描画対象の円図形のサイズが小さい場合には、分割後の曲線が直線分割処理により１本の直線に分割（近似）され、ベジエ曲線の制御点や導出処理が冗長になるという課題があった。
また、複数の円図形の描画が指定された場合には、処理の繰り返しが増えるため、多大な負荷となる場合があるといった課題があった。
また、円図形から分割された直線の座標は、ラスター毎に計算されていた。そのため、ラインジョイン処理・ラインキャップ処理において補間図形として円が指定された場合等、多数の円図形の描画が指定された場合には、多大な負荷が掛かるという課題があった。
本発明は、このような問題点に鑑みてなされたものであり、円のエッジの部分を複数の直線に分割して円を描画するに際し、当該直線の端点の情報を高速に生成することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の画像描画装置は、所定の線分のデータに対応するラスタライズパターンを当該所定の線分のデータと関連付けて記憶するデータベースを記憶する記憶手段と、円の少なくとも一部を表すベクトルデータを取得する取得手段と、前記取得されたベクトルデータに基づいて、前記円の少なくとも一部を近似する複数の線分のデータを生成する生成手段と、前記円の大きさが所定の大きさ以下であるかを判定する判定手段と、前記円の大きさが前記所定の大きさ以下であると判定される場合に、前記生成手段によって生成された前記複数の線分のデータそれぞれについて、前記記憶されたデータベースを用いて当該線分のデータに対応するラスタライズパターンを取得して、当該取得されたラスタライズパターンに従って当該線分をラスタライズすることで、前記円の少なくとも一部を描画する第１の描画手段と、前記円の大きさが前記所定の大きさを超えると判定される場合に、前記生成手段によって生成された前記複数の線分のデータそれぞれについて、前記記憶されたデータベースを用いずに当該線分とスキャンラインとの交点の座標を演算して当該線分をラスタライズすることで、前記円の少なくとも一部を描画する第２の描画手段と、を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、円のエッジの部分を複数の直線に分割して円を描画するに際し、当該直線の端点の情報を高速に生成することができる。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置の構成を示す図である。
【図２】分割数テーブルを示す図である。
【図３】円図形を分割した直線の端点と、端点テーブルを示す図である。
【図４】ラスタライズデータを得る手法を説明する図である。
【図５】ラスタライズデータを生成する際の処理を説明するフローチャートである。
【図６】図５のフローチャートの詳細を説明するフローチャートである。
【図７】図６のステップＳ１７に続くフローチャートである。
【図８】図６のステップＳ１２に続くフローチャートである。
【図９】図８に続くフローチャートである。
【図１０】ラインジョイン処理及びラインキャップ処理を説明する図である。
【図１１】隙間がある折れ線部分と、隙間を補間する円図形の端点を示す図である。
【図１２】直線分割処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【０００９】
以下に、図面を参照しながら、本発明の各実施形態について説明する。
（第１の実施形態）
まず、本発明の第１の実施形態について説明する。
図１は、情報処理装置１０の構成の一例を示す図である。情報処理装置１０は、制御部１１と、通信部１２と、入力部１３と、記憶部１４と、表示部１５とを有している。
制御部１１は、例えばＣＰＵ等を用いて構成され、情報処理装置１０を統括制御する。通信部１２は、例えば通信インターフェース等を用いて構成され、外部装置との通信を行う。入力部１３は、例えばキーボード及びマウス等を用いて構成され、ユーザによる情報処理装置１０に対する入力操作を受け付ける。記憶部１４は、例えばＲＯＭ、ＲＡＭ、及びＨＤＤ等を用いて構成され、情報処理装置１０におけるデータ及びコンピュータプログラム等を記憶する。本実施形態では、記憶部１４には、後述する分割数テーブルＴＢ１、端点テーブルＴＢ２、及びラスタライズパターン・データベースＤＢが予め設定（記憶）されている。この他、最大分割半径Ｒｄ、最大分割数Ｍ、及び最大ラスタライズ半径Ｒｒも記憶部１４に予め設定（記憶）されている。ただし、分割数テーブルＴＢ１、端点テーブルＴＢ２、ラスタライズパターン・データベースＤＢ、最大分割半径Ｒｄ、最大分割数Ｍ、及び最大ラスタライズ半径Ｒｒの少なくとも何れか１つは、情報処理装置１０と通信可能な外部装置に記憶されていてもよい。また、これらのパラメータの値は、実施される形態や環境、システムの処理能力に依存する。
【００１０】
以下、これらのパラメータについて説明を行う。
最大分割半径Ｒｄ、最大分割数Ｍ（Ｍは２以上の整数）は、それぞれ、後述する分割数テーブルＴＢ１、端点テーブルＴＢ２が許容する最大円半径、分割数の最大値である。描画する円図形（真円）の半径ｒが最大円半径Ｒｄを超える場合、当該円図形については、分割数テーブルＴＢ１、端点テーブルＴＢ２、ラスタライズパターン・データベースＤＢを用いたレンダリング処理は不可と判断される。この場合、当該円図形については、ベジエ曲線への分割を行う従来の処理が選択される。
【００１１】
図２は、分割数テーブルＴＢ１の一例を示す図である。
分割数テーブルＴＢ１は、与えられた円図形の半径ｒから、円の直線分割数Ｎ（Ｎは２以上の整数）を得るためのテーブルである。図２に示すように、分割数テーブルＴＢ１は、直線分割数Ｎと、当該直線分割数Ｎを持つ円の最大半径Rmaxと、当該円の最小半径Rminとを構成要素とする。与えられた円図形の半径ｒを最小半径Rminから最大半径Rmaxまでの間に含む直線分割数Ｎが分割数テーブルＴＢ１に含まれる。ここで、分割数テーブルＴＢ１の各直線分割数Ｎは、後述する端点テーブルＴＢ２の効率化のために、最大分割数Ｍの公約数となるようにすることが望ましい。
【００１２】
図３は、円図形を複数の直線に分割する場合の当該直線の端点の一例（図３（ａ））と、端点テーブルＴＢ２の一例（図３（ｂ））とを示す図である。
端点テーブルＴＢ２は、円図形を複数の直線に分割する際に、各直線（線分）の端点の座標を予め行いテーブル化したものである。各直線の端点の座標は、三角関数等の計算を行うことにより求めることができる。通常、Ｎ個に直線分割された線分の端点EPn(xn, yn)（n ＝ 0, 1, ・・・, N-1）は、図３（ａ）に示すように、円の中心点の座標(xo, yo)、円の半径ｒ、及び基準点からの角度θn［rad］により三角関数を用いて求められる。基準点からの角度θnとは、中心点と基準点EP0とを結ぶ直線と、中心点と端点EPnとを結ぶ直線とのなす角度である。基準点からの角度θnは、円の分割数が定まっていれば基準点EP0を０（ゼロ）とする、Ｎ個に直線分割された線分の端点を特定する端点番号ｎを用いて求めることができ、その値を用いた三角関数の計算も予めテーブル化することが可能である。
【００１３】
本実施形態では図３（ｂ）に示すように、基準点EP0からの端点番号ｎ（分割数）をインデックスとして、当該端点番号ｎの端点のＸ座標算出用データ、Ｙ座標算出用データをそれぞれ、D＿x、D＿yとしてテーブル化したものが端点テーブルＴＢ２である。
ここで、端点テーブルＴＢ２を、円図形の半径ｒ、直線分割数Ｎ毎に複数保持する必要はなく、最大分割数Ｍで作成された端点テーブルＴＢ２を、異なる直線分割数Ｎの端点のＸ、Ｙ座標を求める際にも利用でき、単一のテーブルのみで対応できる。その方法として、まず、所望する円図形の直線分割数Ｎと最大分割数Ｍとから、端点テーブルＴＢ２の参照間隔をＭ／Ｎとする。そして、端点番号ｎの端点の座標を求める際には、ｎ×Ｍ／Ｎをインデックスとして端点テーブルＴＢ２からデータを取得するようにする（図３（ｂ）の左端を参照）。この方法により、単一の端点テーブルＴＢ２のみで、直線分割数Ｎに依存せずに、Ｎ個に直線分割された線分の端点の座標を得ることができる。したがって、複数のテーブルに冗長な情報を格納するといったことが無く、効率良くデータを保持することが可能である。直線分割で対応可能な分割数（円半径）は、端点テーブルＴＢ２の分割数に依存するため、端点テーブルＴＢ２の分割数（最大分割数Ｍ）は出来得る限り大きな値であることが望ましい。このように本実施形態では、端点テーブルＴＢ２には、Ｍ個のインデックスがある。
【００１４】
直線分割された線分の端点EPnのＸ座標xn及びＹ座標ynと、基準点からの角度θnは、それぞれ（１）式〜（３）式で表され、端点テーブルＴＢ２から得られる端点EPnのＸ座標xn及びＹ座標ynは、それぞれ（４）式、（５）式で表される。
Xn＝xo＋ｒ×sin（θn）  ・・・（１）
Yn＝yo−ｒ×cos（θn）  ・・・（２）
θn＝ｎ×２π／Ｎ  ・・・（３）
Xn＝xo＋ｒ×TB2［ｎ×Ｍ／Ｎ, １］  ・・・（４）
Yn＝yo−ｒ×TB2［ｎ×Ｍ／Ｎ, ２］  ・・・（５）
ここで、TB2［ｎ×Ｍ／Ｎ, １］は、端点テーブルＴＢ２のインデックスｎ×Ｍ／ＮのD＿xの値を示し、TB2［ｎ×Ｍ／Ｎ, ２］は、端点テーブルＴＢ２のインデックスｎ×Ｍ／ＮのD＿yを示す。
【００１５】
最大ラスタライズ半径Ｒｒは、分割後の各線分をラスタライズする際に、後述するラスタライズパターン・データベースＤＢを用いた手法が許容する円図形の最大半径である。
ラスタライズパターン・データベースＤＢは、分割された線分の描画内容を表すラスタライズデータをデータベース化したものである。
図４は、分割後の線分からラスタライズパターン・データベースＤＢを用いてラスタライズデータを得る手法の一例を説明する図である。
図４に示すように、ラスタライズパターン・データベースＤＢは、開始位置ＣＰ及び終了位置ＮＰ（両端点）の相対的な位置関係の一例として、両端点の座標を整数化したものの差分(dx, dy)と該差分の最大値MAX(dx, dy)をインデックスとする。また、ラスタライズパターン・データベースＤＢは、分割された線分のラスタライズパターン・データとして、例えば、直前のラスターに対するＸ方向の変化分及びＹ方向の変化分（l＿dx, l＿dy）を格納する。
【００１６】
図４に示す例では、データ８１に示すように、両端点の座標を整数化した際の差分の最大値MAX(dx, dy)をインデックス１として、ラスタライズパターン・データを大きさ毎に分類・格納したデータ８２へのエントリを格納する。データ８２は、各線分の大きさ毎に両端点の差分[dx, dy]をインデックス２として、各ラスタライズパターン・データ８３へのエントリを有する。各ラスタライズパターン・データ８３は、線分の開始点を基準とした番号をインデックス３とし、直前のラスターの座標に対するＸ方向の変化分とＹ方向の変化分をそれぞれl＿dx、l＿dyとして格納している。
ここで、円図形から分割される線分の長さ、傾きは限られている。したがって、ラスタライズパターン・データ８３として、線分の全てのラスタライズパターンをデータベース化する必要はない。このように、必要なラスタライズパターン・データのみを保持することで、格納するデータ量を削減し、処理の効率化を図ることができる。
【００１７】
端点テーブルＴＢ２、及びラスタライズパターン・データベースＤＢの少なくとも何れか一方には、円周全体分のデータ（真円の全体に対応するデータ）を格納する必要はない。円の対称性を利用し、真円の一部分に対応するデータ（例えば１象限分（１／４円周分）のデータ）を格納する。そして、異なる象限内の端点（真円の他の部分に対応する端点）の計算や、線分（真円の他の部分に対応する線分）のラスタライズ時には、符号、ＸＹ値を入れ替える処理を行うことで、格納するデータ量を削減し、処理の効率化を図ることができる。
【００１８】
図５は、円図形のベクトルデータからラスタライズデータを生成する際の情報処理装置１０の処理の一例を説明するフローチャートである。
円図形のベクトルデータの描画が指定されると、ステップＳ１において、制御部１１は、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下であるか否かを判定する。この判定の結果、指定された円図形の半径ｒが最大分割半径Ｒｄ以下である場合には、ステップＳ２に進み、分割数テーブルＴＢ１と端点テーブルＴＢ２とを用いた後述する円図形の直線分割処理が実行される。
一方、指定された円図形の半径ｒが最大分割半径Ｒｄ以下でない場合には、ステップＳ３に進み、後述する曲線分割処理を経て直線分割を行う従来手法に基づく直線分割処理が実行される。
【００１９】
ステップＳ２の処理の後のステップＳ４では、制御部１１は、円図形の半径ｒが最大ラスタライズ半径Ｒｒ以下であるか否かを判定する。この判定の結果、円図形の半径ｒが最大ラスタライズ半径Ｒｒ以下である場合には、ステップＳ５に進み、後述するラスタライズデータパターン・データベースＤＢを用いた分割線分のラスタライズ処理が実行される。
ステップＳ４の判定の結果、円図形の半径ｒが最大ラスタライズ半径Ｒｒ以下でない場合、又はステップＳ３の処理が実行された場合には、ステップＳ６に進む。そして、各線分について、ラスター単位で表示装置における座標の算出を行う従来手法に基づくラスタライズ処理が実行される。
【００２０】
次に、図６〜図９のフローチャートを参照しながら、図５のフローチャートの詳細を説明する。
まず、円図形のベクトルデータの描画が指示されると、図６のステップＳ１１において制御部１１は、描画対象の円図形の半径ｒと、最大分割半径Ｒｄとを取得する。
次に、ステップＳ１２において、制御部１１は、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下であるか否かを判定する。この判定の結果、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下である場合には、分割数テーブルＴＢ１及び端点テーブルＴＢ２を用いた端点の座標の算出が可能と判断してステップＳ１３に進む。一方、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下でない場合には、分割数テーブルＴＢ１及び端点テーブルＴＢ２を用いた端点の座標の算出は不可と判断し、図８のステップＳ２５に進む。後述するように、ステップＳ２５以降では、円図形を複数の曲線ベクトルに分割した後に直線分割する従来手法に基づく直線分割処理が行われる。
【００２１】
ステップＳ１３に進むと、制御部１１は、描画対象の円図形の半径ｒを用いて分割数テーブルＴＢ１から、描画対象の円図形の直線分割数Ｎを直接取得すると共に、最大分割数Ｍを取得する。
このように本実施形態では、例えば、ステップＳ１３の処理を実行することにより第１の導出手段の一例が実現され、分割数テーブルＴＢ１を用いることにより第１の記憶領域の一例が実現される。
次に、ステップＳ１４において、制御部１１は、最大分割数Ｍで作成された単一の端点テーブルＴＢ２から所望の直線分割数Ｎに対応したデータの参照を可能とするための参照間隔Ｍ／Ｎを計算する。
次に、ステップＳ１５において、制御部１１は、端点番号ｎ（n = 0, 1, ・・・、N-1）と参照間隔Ｍ／Ｎとから、端点テーブルＴＢ２の参照インデックスをｎ×Ｍ／Ｎとして所望の端点の座標算出用データD＿x、D＿yを取得する。
【００２２】
次に、ステップＳ１６において、制御部１１は、ステップＳ１５で取得した座標算出用データD＿x、D＿yを用いて、端点EPnの座標（xn, yn）を、前述した（４）式、（５）式により計算する。このとき、端点テーブルＴＢ２の保持するデータが第一象限分であり、所望するデータが第二象限の端点であった場合、制御部１１は、端点のＹ座標算出用データD＿yの符号を反転させる。このように、制御部１１は、異なる象限の端点テーブルＴＢ２の座標算出用データを所望の端点の座標算出用データに適応させる手段を有する。  次に、ステップＳ１７において、制御部１１は、現在の端点番号ｎに１を加算したものが、描画対象の円図形の直線分割数Ｎ以上であるか否かを判定する。この判定の結果、現在の端点番号ｎに１を加算したものが、描画対象の円図形の直線分割数Ｎ以上でない場合には、ステップＳ１５に戻り、現在の端点番号ｎに１を加算したものを現在の端点番号ｎとし、当該端点番号ｎについて処理を実行する。このようにして、Ｎ個の端点の座標が計算されると、図７のステップＳ１８に進む。
以上のように本実施形態では、例えば、ステップＳ１４〜Ｓ１７の処理を実行することにより第２の導出手段の一例が実現され、端点テーブルＴＢ２を用いることにより第２の記憶領域の一例が実現される。
【００２３】
図７のステップＳ１８に進むと、制御部１１は、最大ラスタライズ半径Ｒｒを取得する。
次に、ステップＳ１９において、制御部１１は、描画対象の円図形の半径ｒが最大ラスタライズ半径Ｒｒ以下であるか否かを判定する。この判定の結果、描画対象の円図形の半径ｒが最大ラスタライズ半径Ｒｒ以下である場合には、ラスタライズパターン・データベースＤＢを用いたラスタライズ処理が可能と判断してステップＳ２０へ進む。一方、描画対象の円図形の半径ｒが最大ラスタライズ半径Ｒｒ以下でない場合には、図９のステップＳ３１に進む。ステップＳ３１では、後述するように、各線分について、表示装置における座標の算出をラスター単位で行う従来手法に基づくラスタライズ処理が実行される。
【００２４】
ステップＳ２０に進むと、制御部１１は、複数に分割された線分の両端点の座標を整数化し、その差分dn=（dx, dy）を計算する（図４を参照）。
次に、ステップＳ２１において、制御部１１は、ステップＳ２０で計算した差分dnの最大値MAX(dx, dy)を計算する。
次に、ステップＳ２２において、制御部１１は、差分dnと、当該差分dnの最大値MAX(dx, dy)とをインデックスとしてラスタライズパターン・データベースＤＢから、所望の線分のラスタライズパターン・データを一意に取得する。
次に、ステップＳ２３において、制御部１１は、線分の開始端点ＣＰに、ステップＳ２２で取得したラスタライズパターン・データを順次加算することで線分の表示装置における座標を高速に求める。
【００２５】
次に、ステップＳ２４において、制御部１１は、現在の端点番号ｎに１を加算したものが、描画対象の円図形の直線分割数Ｎ以上であるか否かを判定する。この判定の結果、現在の端点番号ｎに１を加算したものが、描画対象の円図形の直線分割数Ｎ以上でない場合には、ステップＳ１５に戻り、現在の端点番号ｎに１を加算したものを現在の端点番号ｎとし、当該端点番号ｎについて処理を実行する。このようにして、Ｎ個の線分のラスタライズデータが得られ（円図形のラスタライズが行われ）、描画対象の円図形の直線分割数Ｎ以上になると、本フローチャートによる処理を終了する。
以上のように本実施形態では、例えば、ステップＳ２０〜２４の処理を実行することにより第３の導出手段の一例が実現され、ラスタライズパターン・データベースＤＢを用いることにより第３の記憶領域の一例が実現される。
【００２６】
前述したように、図６のステップＳ１２において、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下でないと判定されると、分割数テーブルＴＢ１及び端点テーブルＴＢ２を用いた端点の座標の算出は不可と判断し、図８のステップＳ２５に進む。
ステップＳ２５に進むと、制御部１１は、円図形のベジエ曲線（以下の説明では必要に応じて分割曲線Ｃｎと称する）への分割数Ｎｃを１象限１曲線として計算する。
次に、ステップＳ２６において、制御部１１は、分割曲線Ｃｎ（n ＝ 1, 2, ・・・, Nc）の開始点、終了点を含む制御点を計算する。制御点の計算は、特許文献３に記載されているように公知の技術であるので、ここでは、詳細な説明を省略する。
次に、ステップＳ２７において、制御部１１は、直線近似方法を用いて、ステップＳ２６で計算された制御点から分割曲線Ｃｎの直線分割数Ｎｎを計算する。直線近似方法は、特許文献４に記載されているように公知の技術であるので、ここでは、詳細な説明を省略する。
【００２７】
次に、ステップＳ２８において、制御部１１は、分割曲線Ｃｎのｉ番目の分割線分Ｓｉ（i ＝ 1, 2, ・・・, Nn）の両端点の座標を、前述した（１）式〜（３）式を用いて計算する。
次に、ステップＳ２９において、制御部１１は、現在のｉに１を加算したものが、分割曲線Ｃｎの直線分割数Ｎｎ以上であるか否かを判定する。この判定の結果、現在のｉに１を加算したものが、分割曲線Ｃｎの直線分割数Ｎｎ以上でない場合には、ステップＳ２８に戻り、現在のｉに１を加算したものを現在のｉとし、当該ｉ番目の分割線分Ｓｉの両端点の座標を計算する。
一方、現在のｉに１を加算したものが、分割曲線Ｃｎの直線分割数Ｎｎ以上となり、分割曲線Ｃｎの各分割線分Ｓｉの両端点の座標が計算されると、ステップＳ３０に進む。ステップＳ３０に進むと、制御部１１は、現在の端点番号ｎに１を加算したものが、分割曲線Ｃｎの分割数Ｎｃ以上であるか否かを判定する。この判定の結果、現在の端点番号ｎに１を加算したものが、分割曲線Ｃｎの分割数Ｎｃ以上でない場合には、ステップＳ２６に戻り、現在の端点番号ｎに１を加算したものを現在の端点番号ｎとし、当該端点番号ｎについて処理を実行する。このようにして、ステップＳ２６〜Ｓ２９の処理をＮｃ個の分割曲線毎に繰り返し、円図形の直線分割が行われると、図９のステップＳ３１に進む。図８のフローチャートが実行された場合、円図形の半径ｒが大きく、直線分割後の各線分のラスタライズパターンが多数あると判断される。そこで、本実施形態では、図８のフローチャートが実行された場合には、図９のフローチャートを実行し、各線分について、ラスター単位で表示装置における座標の算出を行う従来手法に基づくラスタライズ処理が行われる。
【００２８】
図９のステップＳ３１に進むと、制御部１１は、線分Ｓｎ（n ＝ 0, 1, ・・・, N-1）の処理ラスター位置Ｌｎとして開始点ＣＰｎをセットする。
次に、ステップＳ３２において、制御部１１は、線分Ｓｎの処理ラスター位置Ｌｎにおける表示装置上の座標を計算する。その後、ステップＳ３３において、制御部１１は、現在の処理ラスター位置Ｌｎに１を加算し、現在の処理ラスター位置を次の位置（ラスター）へ移動させる。
次に、ステップＳ３４において、制御部１１は、現在の処理ラスター位置Ｌｎが、線分Ｓｎの終了点ＮＰｎを超えたか否かを判定する。この判定の結果、現在の処理ラスター位置Ｌｎが、線分Ｓｎの終了点ＮＰｎを超えていない場合には、ステップＳ３２に戻り、現在の処理ラスター位置Ｌｎについて処理を行う。そして、現在の処理ラスター位置Ｌｎが、線分Ｓｎの終了点ＮＰｎを超え、線分Ｓｎの終了点ＮＰｎの座標が計算されると（線分Ｓｎのラスタライズ処理が行われると）、ステップＳ３５に進む。
ステップＳ３５に進むと、制御部１１は、現在の端点番号ｎに１を加算したものが、描画対象の円図形の直線分割数Ｎ以上であるか否かを判定する。この判定の結果、現在の端点番号ｎに１を加算したものが、描画対象の円図形の直線分割数Ｎ以上でない場合には、ステップＳ１５に戻り、現在の端点番号ｎに１を加算したものを現在の端点番号ｎとし、当該端点番号ｎについて処理を実行する。このようにして、ステップＳ３１〜Ｓ３４の線分のラスタライズ処理がＮ個の線分毎に繰り返し行われ、円図形のラスタライズ処理が行われると、本フローチャートによる処理を終了する。
【００２９】
以上のように本実施形態では、円図形が幾つの直線に分割されるかを、当該円図形の半径ｒと対応付けて分割数テーブルＴＢ１に登録しておく。また、分割された直線の端点のＸ座標算出用データＤ＿ｘとＹ座標算出用データＤ＿ｙとを、直線分割数Ｎと対応付けて端点テーブルＴＢ２に予め登録しておく。したがって、描画図形が円図形の場合には、外形（曲線）をベジエ曲線で近似する必要がなく、分割された直線の各分割点（端点）を直接に且つ高速に求めることができる。また、分割された直線の端点の座標の計算処理で負荷の掛かる計算処理の効率化を図ることができる。よって、真円のエッジの部分を複数の直線に分割して真円を描画するに際し、当該直線の端点の情報を高速に生成することができる。
また、本実施形態では、線分をラスタライズしたデータをラスタライズパターンとして、線分の両端点の座標の差分と対応付けてラスタライズパターン・データベースＤＢに予め登録しておく。したがって、線分とラスター（スキャンライン）との交点の座標をその都度（スキャンライン毎に）計算することなく線分を描画することが可能になる。
【００３０】
尚、本実施形態で説明した図５のステップＳ３（図８）、ステップＳ６（図９）は、それぞれ、従来の手法で実現できる直線分割処理、ラスタライズ処理であれば、前述した方法に限定されるものではない。
また、本実施形態では、円図形が幾つの直線に分割されるかを、当該円図形の半径ｒと対応付けて分割数テーブルＴＢ１に登録した場合を例に挙げて説明した。しかしながら、円図形の半径ｒの代わりに、円図形の直径や円周等、円図形（真円）の大きさの情報を用いるようにしてもよい。
また、本実施形態では、円図形の半径ｒと、最大分割半径Ｒｄ及び最大ラスタライズ半径Ｒｒとの比較結果に応じて処理を切り替えるようにした。しかしながら、最大分割半径Ｒｄ及び最大ラスタライズ半径Ｒｒの少なくとも何れか一方を設定せずに、図６のステップＳ１３、Ｓ２０以降の処理を無条件で実行するようにしてもよい。
また、本実施形態では、情報処理装置１０が画像描画装置の一例である場合について説明したが、画像描画装置は、印刷装置等であってもよい。
【００３１】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。前述した第１の実施形態では、一般的な円図形（の全部）を描画する場合を例に挙げて説明した。これに対し、本実施形態では、ラインジョイン処理、ラインキャップ処理において、補間図形として円が指定された場合の描画について説明する。この場合には、円図形の必要な一部だけを選択し描画する必要がある。このように本実施形態と前述した第１の実施形態とは、ラスタライズ処理の対象となる図形が異なることによる処理（曲線の図形を複数の直線に分割し、分割した直線の端点の座標を導出する処理）が主として異なる。したがって、本実施形態の説明において、前述した第１の実施形態と同一の部分については、図１〜図９に付した符号と同一の符号を付す等して詳細な説明を省略する。
【００３２】
図１０は、ラインジョイン処理及びラインキャップ処理を説明する図である。
図１０（ａ）に示すように、線幅のある線の描画を行う場合、折れ線部分に隙間５１が発生する。この隙間５１を直線、折れ線、円等の所定の形状で、図１０（ｂ）に示すように補間する処理がラインジョイン処理である。一方、図１０（ａ）に示すように、線幅のある線の描画を行う場合に線端５２を直線、円等の所定の形状で図１０（ｂ）に示すように補間する処理がラインキャップ処理である。
【００３３】
図１１は、隙間が生じている折れ線部分と、ラインジョイン処理により当該隙間を補間する円図形の端点の一例を示す図である。
図１１（ａ）に示すように、線幅ｗを持つ折れ線を、ラインジョイン処理において、円で補間して描画する場合、折れ線の隙間を破線１４１で示す形状に円図形で補間する必要がある。以下の説明では、必要に応じてこの円図形を補間円図形と称する。
図１２は、直線分割処理の一例を説明するフローチャートであり、図６の代わりに実行されるものである。本実施形態においても、第１の実施形態で説明したように、予めパラメータが設定される。
まず、図１２のステップＳ４１において、制御部１１は、補間円図形の半径ｒと、最大分割数Ｒｄとを取得する。このとき、ラインジョイン処理、ラインキャップ処理における補間円図形の半径ｒは、描画線分（折れ線）の線幅ｗの２分の１となるので、制御部１１は、まず線幅ｗを取得し、取得した線幅ｗを１／２倍したものを補間円図形の半径ｒとして求める。
【００３４】
次に、ステップＳ４２において、制御部１１は、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下であるか否かを判定する。この判定の結果、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下でない場合には、前述した図８のステップＳ２５に進む。これにより、図１１（ａ）の破線１４１に示す補間円図形が図８に示した処理に従って直線分割される。
一方、描画対象の円図形の半径ｒが最大分割半径Ｒｄ以下である場合には、ステップＳ４３に進む。ステップＳ４３に進むと、制御部１１は、描画対象の円図形の半径ｒを用いて分割数テーブルＴＢ１から、描画対象の円図形（１周分の円）の直線分割数Ｎを直接取得すると共に、最大分割数Ｍを取得する。
このように本実施形態では、例えば、ステップＳ４３の処理を実行することにより第１の導出手段の一例が実現され、分割数テーブルＴＢ１を用いることにより第１の記憶領域の一例が実現される。
次に、ステップＳ４４において、制御部１１は、最大分割数Ｍで作成された単一の端点テーブルＴＢ２から所望の直線分割数Ｎに対応したデータ参照を可能とするための参照間隔Ｍ／Ｎを計算する。
【００３５】
図１１に示す例では、図１１（ａ）における折れ線の隙間を円図形で補間するため、図１１（ｂ）に示すように、当該隙間を円図形で補完した場合に、折れ線の角点ＳＰ、ＦＰの間に挟まれる端点EPns〜EPneまでを求める必要がある。
そこで、ステップＳ４５において、制御部１１は、必要な端点の開始端点番号nsと終了端点番号neとを計算する。その方法として、まず、制御部１１は、基準点EP0から各角点ＳＰ、ＦＰまでの角度θs、θe［rad］を求める。ここで、基準点EP0から角点ＳＰまでの角度θsは、中心点と基準点EP0とを結ぶ直線と、中心線と角点ＳＰとを結ぶ直線とのなす角度である。また、基準点EP0から角点ＦＰまでの角度θeは、中心点と基準点EP0とを結ぶ直線と、中心線と角点ＦＰとを結ぶ直線とのなす角度である。次に、制御部１１は、端点の開始端点番号nsを(ｎ−１)×２π／Ｍ＜θs≦n×２π／Ｍを満たすｎとして計算する。同様に制御部１１は、端点の終了端点番号neをｎ×２π／Ｍ≦θe＜（ｎ＋１）×２π／Ｍを満たすｎとして計算する。これにより、円図形の描画に必要な端点番号が求まる。端点の開始端点番号nsが求まると、ステップＳ４６において、制御部１１は、端点座標計算の開始点をｎ＝nsとしてセットする。
【００３６】
次に、ステップＳ４７において、制御部１１は、端点番号ｎ（n = ns, ns+1, ・・・, ne）と参照間隔Ｍ／Ｎとから、端点テーブルＴＢ２の参照インデックスをｎ×Ｍ／Ｎとして所望の端点の座標算出用データD＿x、D＿yを取得する。
次に、ステップＳ４８において、制御部１１は、ステップＳ４７で取得した座標算出用データD＿x、D＿yを用いて、端点EPnの座標（xn, yn）を、前述した（４）式、（５）式により計算する。本実施形態でも、制御部１１は、異なる象限の端点テーブルＴＢ２の座標算出用データを所望の端点の座標算出用データに適応させる手段を有する。
【００３７】
次に、ステップＳ４９において、制御部１１は、現在の端点番号ｎに１を加算したものが、端点の終了端点番号ne以上であるか否かを判定する。この判定の結果、現在の端点番号ｎに１を加算したものが、端点の終了端点番号ne以上でない場合には、ステップＳ４７に戻り、現在の端点番号ｎに１を加算したものを現在の端点番号ｎとし、当該端点番号ｎについて処理を実行する。このようにして、（ne−ns）個の端点の座標が計算されると、図７のステップＳ１８に進む。そして、補間図形である弧SP-FPの各分割線分（線分SP-EPns、EPne-FPを含む）を第１の実施形態で説明したのと同様にしてラスタライズ処理を行うことで必要な部分だけを描画する。
以上のように本実施形態では、例えば、ステップＳ４４〜Ｓ４９の処理を実行することにより第２の導出手段の一例が実現され、端点テーブルＴＢ２を用いることにより第２の記憶領域の一例が実現される。
【００３８】
以上のように本実施形態では、ラインジョイン処理・ラインキャップ処理を行うに際し、線の線幅の１／２倍を半径ｒとする円図形として、分割数テーブルＴＢ１から直線分割数Ｎを取得する。そして、補間する領域（破線１４１）に対応する端点の開始端点番号nsと終了端点番号neを求め、開始端点番号nsから終了端点番号neまでの各端点の座標を、端点テーブルＴＢ２から取得した端点の座標算出用データD＿x、D＿yに基づいて計算する。したがって、通常の円図形だけでなく、円図形を用いてラインジョイン処理・ラインキャップ処理を行う場合にも、前述した第１の実施形態で説明した効果が得られる。
【００３９】
尚、前述した実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００４０】
（その他の実施例）
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005479017.tif 000002
【図２】
0005479017.tif 000003
【図３】
0005479017.tif 000004
【図４】
0005479017.tif 000005
【図５】
0005479017.tif 000006
【図６】
0005479017.tif 000007
【図７】
0005479017.tif 000008
【図８】
0005479017.tif 000009
【図９】
0005479017.tif 000010
【図１０】
0005479017.tif 000011
【図１１】
0005479017.tif 000012
【図１２】
0005479017.tif 000013