(57)【特許請求の範囲】
【請求項１】
円、円弧、楕円および楕円弧を描画する機能を有する図形描画装置において、入力された情報から描画する円、円弧、楕円および楕円弧の大きさと線の太さを認識する初期値認識手段と、該初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる近似直線の線分長と等しい円弧長となる座標を順次生成する円弧セグメント走査手段と、該円弧セグメント走査手段が生成した座標を円、円弧、楕円および楕円弧を近似する線分の始点と終点の座標として順次保持するセグメント始点・終点格納手段と、前記始点と終点間の円弧上の座標を生成する円弧座標発生手段と、前記始点と終点とを結ぶ直線上の座標を生成する直線座標発生手段と、該直線座標発生手段が生成した座標を基に前記始点と終点とを結ぶ直線に直交しかつ前記初期値認識手段で認識された線幅と等しい長さを有する画素列を生成する法線ベクトル生成手段と、該法線ベクトル生成手段で生成された画素列を前記円弧座標発生手段が生成した座標毎に発生させ描画を行なう描画手段を備えたことを特徴とする図形描画装置。
【請求項２】
前記円弧セグメント走査手段は、前記初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さに基づいて円弧上の座標を生成する円弧セグメント座標発生手段と、該円弧セグメント座標発生手段が生成した座標の移動距離を演算する距離演算手段と、前記初期値認識手段が認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる線分長を算出するセグメントレングス算出手段と、該セグメントレングス算出手段が求めた線分長を前記移動距離演算手段が求めた移動距離が上回るか否かを判定するセグメント走査判定手段を備えていることを特徴とする請求項１に記載の図形描画装置。
【請求項３】
前記描画手段は、前記円弧座標発生手段が求めた円弧座標に基づいて画素抜けの発生を判定する画素抜け判定手段と、円弧画素を始点とした法線ベクトルに沿って描画する法線ベクトル描画手段と、該法線ベクトル描画手段による描画が前記セグメントの終点まで終了したか否かを判定するセグメント終了条件判定手段を備えていることを特徴とする請求項１または２に記載の図形描画装置。
【請求項４】
前記円弧座標発生手段は、前記始点と終点間の円弧上の座標を生成する際に、描画する線種に従って前記円弧上の少なくとも一部の座標のみを生成することを特徴とする請求項１ないし３のいずれか１項に記載の図形描画装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、図形描画装置に関するものであり、特に線幅のある円、円弧、楕円および楕円弧などを高品質に描画する図形太線描画装置に関するものである。
【０００２】
【従来の技術】
近年、ＣＡＤ（Ｃｏｍｐｕｔｅｒ  Ａｉｄｅｄ  Ｄｅｓｉｇｎ）システムやコンピュータグラフィックス等において、図形や文字を出力する装置であるプリンタやプロッタ等の解像度が高くなっている。解像度が高くなればなるほど図形や文字はより美しく出力される。しかしながら、高解像度化に伴い１ドット幅の線が非常に細くなり実用的でないため、２ドット以上の線幅を有する線で描画する機能が必要になっている。また、ＣＡＤシステムにおいて円、円弧、楕円および楕円弧はそれらを組み合せることで曲線を表現することもできる。さらに、実線だけでなく一点鎖線や点線、破線といった線種もよく使用される。
【０００３】
従来の図形描画装置は、線の太い円・円弧を描画するときには、次に述べる方法がとられてきた。図１５は、従来の線分描画方法の描画手順の説明図である。まず、図１５（Ａ）に示す描画方法では、公知のＢｒｅｓｅｎｈａｍの円弧発生アルゴリズムによって線幅１画素の円弧は高速に発生することができるため、この円弧を数本重ねることによって太線を描画している。この方式の具体例としては、例えば、直線についての例が特開平５−２３３８２１号公報等に記載されている。
【０００４】
次に、図１５（Ｂ）に示す描画方法は、描画したい円弧の輪郭線を予め描画して、その後、一般的な塗りつぶし処理を用いて太線を描画している。この方式の具体例としては、例えば、直線についての例が特開平４−２０５５７５号公報、特開平４−７７９７７号公報、特開平５−６７２１５号公報等に記載されている。
【０００５】
さらに、図１５（Ｃ）に示す描画方法は、目的の線幅を直径とする円形の画素パターンを円弧の始点から終点まで公知のＢｒｅｓｅｎｈａｍの円弧発生アルゴリズムに基づいて１画素ずつ移動させ、画素パターン内を塗りつぶしていくことで描画する。
【０００６】
また、図１５（Ｄ）に示す描画方式は、曲線を直線近似して描画する方法である。この方式の具体例として、例えば、特開平４−１２８９８０公報等に示されている。
【０００７】
ところで、描画される円の画質または精度は、円周上のどの位置においても線幅が一定であることである。また破線等を描画する場合においても、破線の線分長と線分間隔および線幅が円周上のどの位置においても一定であることが画質または精度を決める。さらに各線分の端点の形状を描画方向に直交した直線にそろえる必要がある。
【０００８】
このような観点から従来の各描画方法を検討すると、まず図１５（Ａ）に示す描画方法では、円周上のどの位置においても線幅を一定にするために必要な細線の本数を算出することは難しい。また、破線を描画する場合、破線の各線分全ての端点を描画方向に直交した直線で切り取ってそろえるように細線の描画を制御することは困難である。
【０００９】
また、図１５（Ｂ）に示す描画方法では、破線を描画する場合は破線の各線分ごとに端点形状まで含めた輪郭線を求める必要があり、既存の塗りつぶし方式を用いた際に処理が複雑になることや、膨大なメモリを必要とする可能性があるなどの問題がある。また、特に楕円の輪郭線を描画する場合は、ある楕円から内側または外側に線幅長離れた楕円の輪郭線を描画するために必要なＢｒｅｓｅｎｈａｍの円弧発生アルゴリズムのパラメータを特定することは困難である。
【００１０】
図１５（Ｃ）に示す描画方法では、円形の画素パターンを用いているので、円、円弧、楕円、楕円弧のどの位置においても線幅をほぼ一定にすることができる。しかし、端点の形状は半円形状に限られ、例えば、破線を描画した場合には、端点の形状は画素パターンの半円の形状のままとなり、さらに画素パターンの直径より短い長さの線分を描画しようとするとそのままでは描画することができないという問題を有している。
【００１１】
次に図１５（Ｄ）に示す描画方法について検討する。図１６は、曲線を短い直線に近似して描画する従来の線分描画方法の描画手順の説明図である。図１６に示すように、この方式は、発生させようとする曲線のなかでＸ軸方向、Ｙ軸方向、斜め方向だけに連続する直線画素列を取り出し、その画素列を所望の線幅の線分として元の画像にマッピングする方式である。図１６（Ａ）に示すような曲線を３画素幅で発生させる場合、図１６（Ａ）の周囲に示す５つの直線画素列に分割し、それぞれを３画素幅として書き戻す。これにより図１６（Ｂ）に示す３画素幅の曲線を得ることができる。
【００１２】
この方式において、例えば、破線を描画しようとすると、各線分中の各画素または線分ごとに描画するか否かを切り替えることによって可能であると思われる。しかしこの方式では、斜めに描画する線分の線幅が正確でないため、破線の画質が劣化し、さらに破線の各線分は３種類の方向しか持たない直線によって成り立つため常に各線分の切り口を描画方向に直交した直線にそろえることが難しいという問題を有している。
【００１３】
以上のことから、従来の描画方法で円、円弧、楕円、楕円弧の描画を高品質に行なうことは困難である。また、破線や点線などを高品質に描画することに対しては、ほとんど考慮されていないのが現状である。
【００１４】
【発明が解決しようとする課題】
本発明は、上述した事情に鑑みてなされたもので、円、円弧、楕円および楕円弧のどの位置においても、所望の線幅を一定に保ちながら高画質に描画を行ない、さらに鎖線や破線、点線など、実線以外の線種についても、各線素の線分長と線分間隔および線幅を一定に保ちながら高画質に描画を行なうことのできる図形描画装置を提供することを目的とするものである。
【００１５】
【課題を解決するための手段】
請求項１に記載の発明は、円、円弧、楕円および楕円弧を描画する機能を有する図形描画装置において、入力された情報から描画する円、円弧、楕円および楕円弧の大きさと線の太さを認識する初期値認識手段と、該初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる近似直線の線分長と等しい円弧長となる座標を順次生成する円弧セグメント走査手段と、該円弧セグメント走査手段が生成した座標を円、円弧、楕円および楕円弧を近似する線分の始点と終点の座標として順次保持するセグメント始点・終点格納手段と、前記始点と終点間の円弧上の座標を生成する円弧座標発生手段と、前記始点と終点とを結ぶ直線上の座標を生成する直線座標発生手段と、該直線座標発生手段が生成した座標を基に前記始点と終点とを結ぶ直線に直交しかつ前記初期値認識手段で認識された線幅と等しい長さを有する画素列を生成する法線ベクトル生成手段と、該法線ベクトル生成手段で生成された画素列を前記円弧座標発生手段が生成した座標毎に発生させ描画を行なう描画手段を備えたことを特徴とするものである。
【００１６】
請求項２に記載の発明は、請求項１に記載の図形描画装置において、前記円弧セグメント走査手段は、前記初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さに基づいて円弧上の座標を生成する円弧セグメント座標発生手段と、該円弧セグメント座標発生手段が生成した座標の移動距離を演算する距離演算手段と、前記初期値認識手段が認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる線分長を算出するセグメントレングス算出手段と、該セグメントレングス算出手段が求めた線分長を前記移動距離演算手段が求めた移動距離が上回るか否かを判定するセグメント走査判定手段を備えていることを特徴とするものである。
【００１７】
請求項３に記載の発明は、請求項１または２に記載の図形描画装置において、前記描画手段は、前記円弧座標発生手段が求めた円弧座標に基づいて画素抜けの発生を判定する画素抜け判定手段と、円弧画素を始点とした法線ベクトルに沿って描画する法線ベクトル描画手段と、該法線ベクトル描画手段による描画が前記セグメントの終点まで終了したか否かを判定するセグメント終了条件判定手段を備えていることを特徴とするものである。
【００１８】
請求項４に記載の発明は、請求項１ないし３のいずれか１項に記載の図形描画装置において、前記円弧座標発生手段は、前記始点と終点間の円弧上の座標を生成する際に、描画する線種に従って前記円弧上の少なくとも一部の座標のみを生成することを特徴とするものである。
【００１９】
【発明の実施の形態】
図１は、本発明の図形描画装置の第１の実施の形態を示すブロック図である。図中、１は初期値認識部、２は円弧セグメント走査部、３はセグメント始点・終点格納部、４は直線座標発生部、５は法線ベクトル生成部、６は円弧座標発生部、７は描画部、８は終了条件判定部、９はフレームメモリである。
【００２０】
初期値認識部１は、描画する円、円弧、楕円および楕円弧の大きさと線の太さを認識する。円、円弧の大きさとしては半径を、また楕円、楕円弧の場合はＸ軸およびＹ軸の径を認識する。さらに円弧、楕円弧の場合には、描画開始点と描画終了点の座標、あるいは描画開始点または描画終了点の座標と中心角、または、描画開始点および描画終了点の存在するある方向からの角度等を認識する。これらは、キーボードやマウスなどの入力装置から入力されたり、あるいはファイルや他の計算機から与えられるページ記述言語等で記述された描画データを解釈することで得られる。
【００２１】
円弧セグメント走査部２は、円、円弧、楕円、および楕円弧を直線で近似して描画するために最適な線分長と等しい長さだけ、円弧上の座標を走査する。この線分長の区間をセグメントと呼び、線分長をセグメントレングスと呼ぶ。セグメントレングスは、円と円弧の場合には半径と線幅から、また楕円と楕円弧の場合にはＸ軸およびＹ軸の径、Ｘ軸の径とＹ軸の径の比および線幅から求めることができる。円弧座標上をセグメントレングスと等しい長さだけ走査することでセグメントの始点と終点が求められる。セグメント始点・終点格納部３は、円弧セグメント走査部２で求められたセグメントの始点および終点の座標を一時保持する。
【００２２】
直線座標発生部４は、セグメント始点・終点格納部３に保持されているセグメントの始点から終点までの直線座標を、例えばＤＤＡ等によって発生する。法線ベクトル生成部５は、直線座標発生部４で発生した直線座標に対応する画素列を、線幅分のみ９０°回転させることによって、セグメントの始点と終点を結ぶ直線に直交する法線ベクトルを生成する。円弧座標発生部６は、セグメント始点・終点格納部３に保持されているセグメントの始点および終点間の円弧上の座標を発生する。円弧上の座標の発生には、例えばＢｒｅｓｅｎｈａｍの円弧発生アルゴリズム等を用いることができる。
【００２３】
描画部７は、円弧座標発生部６で発生した円弧上の各座標を法線ベクトル生成部５で生成した法線ベクトルの始点として、法線ベクトルを構成する画素列を描画する。このとき、隣り合う法線ベクトル間に描画されない画素が生じる場合は、その画素の描画も行なう。終了条件判定部８は、描画開始点から描画終了点までの描画が終了したか否かを判定し、描画終了点までの描画が終了していない間は、円弧セグメント走査部２以降の処理を繰り返し行なわせる。フレームメモリ９は、描画部７で描画された画像を保持する。
【００２４】
図２は、本発明の図形描画装置の第１の実施の形態における描画手順の一例の説明図である。ここでは、描画開始点から描画終了点までのある線幅の円弧を描画する場合を例にして説明する。初期値認識部１は、描画する円弧の半径、描画開始点、描画終了点、線幅などを認識する。
【００２５】
円弧セグメント走査部２は、円弧上の始点から、円弧内で円弧上の画素の接線のなす角度がほぼ等しいと見なせる最大の円弧長だけ走査し、セグメントの終点を求める。図２では一部のセグメントについて示しており、例えば円弧上の点ａを始点とし、走査して得たセグメントの終点ｂを求める。求めたセグメントの始点ａと終点ｂの座標は、セグメント始点・終点格納部３に一時保持される。
【００２６】
次に、直線座標発生部４がセグメント始点・終点格納部３に格納されているセグメントの始点ａら終点ｂを通過する直線上を線幅長だけ走査し、直線上の画素の座標を発生する。法線ベクトル生成部５は、直線座標発生部４で発生した座標を、セグメントの始点ａを中心に９０゜回転させて法線ベクトルａ−ａ’を生成する。
【００２７】
一方、円弧座標発生部６は、セグメント始点・終点格納部３に格納されているセグメントの始点ａと終点ｂの間の円弧ａｂ上の画素の座標を点ａから順に発生する。描画部７は、円弧座標発生部６で発生した円弧ａｂ上の各画素の座標について、その座標を法線ベクトルの始点として、法線ベクトル生成部５で生成した法線ベクトルａ−ａ’を構成する画素列を描画する。図２では、描画した法線ベクトルを細矢印で示している。このとき、隣り合う法線ベクトル間に描画されない画素が生じる場合は、その画素の描画も行なう。このようにして、始点ａと終点ｂの間のセグメントの描画が終了する。
【００２８】
終了条件判定部８は、終点ｂが描画終了点でないことを確認し、点ｂを始点とする新たなセグメントの処理を開始させる。以下同様にして、順次セグメントへの分割と、各セグメントにおける描画処理が行なわれる。このようにして、描画開始点から描画終了点まで、指定された線幅の円弧がフレームメモリ９内に描画される。
【００２９】
このようにして描画された円弧の外周は、円弧座標発生部６で発生した円弧上の画素がそのまま用いられるため、画質の劣化が少ない。また、線幅は法線ベクトルによって描画されるので、円周上のどの位置においても正確で一定であり、端点形状は直線で描画方向に直交する。
【００３０】
また、法線ベクトルを特定パターンに従って描画と抑止を切り替えながら処理することにより、破線や点線、鎖線などが高精度に描画可能となる。図３は、本発明の図形描画装置の第１の実施の形態における破線の描画の一例の説明図である。図３では簡単のため、それぞれのセグメントは６本の法線ベクトルを含むものとし、５ドットごとに描画と抑止を切り替えながら処理するものとする。このような処理は、例えば円弧座標発生部６が発生した円弧上の画素の座標を、描画部７に５つ送った後の５つは送らずに捨てるように制御ればよい。このような簡単な制御により、図３に示すように、各線素の幅、長さ、線素間の間隔、線素の形状の揃った、高品質の破線などを描画することができる。円弧座標発生部６で発生した円弧上の画素の座標を描画部７に送る規則（特定パターン）を変更するだけで、線素の長さや線素間の間隔を変更でき、また、１点鎖線や２点鎖線などの鎖線も描画可能である。この特定パターンは数値によって予め与えておくほか、例えば関数を与えておき、線幅に従って決定したり、半径や曲率などに従って動的に決定するように構成することも可能である。
【００３１】
また、法線ベクトルを生成した際に、画素を抜くことによって２重線などの多重線を描くことも可能である。このときの線の間の幅も一定となる。さらに抜く画素を周期的に変化させることによって波線も可能であり、これらと破線などの線種を組み合わせることも可能である。
【００３２】
図４は、本発明の図形描画装置の第２の実施の形態を示すブロック図である。図中、図１と同様の部分には同じ符号を付して説明を省略する。１１はセグメントレングス算出部、１２は円弧セグメント座標発生部、１３は移動距離演算部、１４はセグメント走査判定部である。この第２の実施の形態では、上述の第１の実施の形態における円弧セグメント走査部２の具体例を示している。この実施の形態を用いて、主にセグメントの処理について詳述する。
【００３３】
セグメントレングス算出部１１は、初期値認識部１で認識した描画する曲線の描画開始点と描画終了点の座標、線幅、楕円の場合はＸ軸およびＹ軸の径に基づいてセグメントの長さであるセグメントレングスを算出する。円弧セグメント座標発生部１２は、円弧上の画素の座標を順次発生する。円弧上の画素の座標は、例えば、公知のＢｒｅｓｅｎｈａｍの円弧発生アルゴリズムを用いて発生させることができる。移動距離演算部１３は、セグメントの始点となる画素の座標から、円弧セグメント座標発生部１２が発生した画素の座標までの移動距離を演算する。セグメント走査判定部１４は、セグメントレングス算出部１１で求めたセグメントレングスと、移動距離演算部１３で演算される移動距離を比較してセグメントの走査の終了を判定し、終了した場合は円弧セグメント座標発生部１２がセグメントの始点および終点をセグメント始点・終点格納部３に送る。
【００３４】
次に、本発明の図形描画装置の第２の実施の形態における動作について説明する。図５は、本発明の第２の実施の形態におけるセグメントレングス算出部の動作の一例を示すフローチャートである。Ｓ３１において、描画する曲線が円または円弧か、あるいは楕円または楕円弧かを判定する。円または円弧であれば、初期値認識部１の認識している半径を以下の最大近似直線長の計算に用いる半径とする。また、楕円または楕円弧であれば、Ｓ３２において、初期値認識部１が認識している楕円の長軸および短軸の径の値から、最大近似直線長の計算に用いる半径（以下この半径を、径に応じた半径と呼ぶ）の算出を行なう。この処理は後述する。
【００３５】
次に、Ｓ３３において、円の半径、あるいは楕円の場合はＳ３２で算出された径に応じた半径に基づき、直線近似しても画質劣化があまり認められない範囲で最も長い近似直線長を求める。この処理についても後述する。
【００３６】
そして、Ｓ３４において、初期値認識部１で認識された線幅と、Ｓ３３で算出された最大の近似直線長を比較し、小さい方をセグメントレングスとする。すなわち、最大の近似直線長が線幅以上の場合にはＳ３５においてセグメントレングスを線幅とし、線幅の方が最大の近似直線長よりも長い場合にはＳ３６においてセグメントレングスを最大近似直線長とする。このようにして、セグメントレングス算出部１１においてセグメントレングスが算出される。
【００３７】
図６は、本発明の第２の実施の形態におけるセグメントレングス算出時の径に応じた半径計算の動作の一例の説明図である。この径に応じた半径を簡単に求めるため、この例ではカーブの急な領域と緩やかな領域に分け、それぞれの領域について便宜上の径に応じた半径を決定している。図６に示すように、長軸との交点およびその付近をカーブの急な領域２とし、短軸との交点およびその付近をカーブの緩やかな領域１としている。そして、２つの領域に分けるためのしきい値Ｔｈは、長軸と短軸の径の比が４：１以下、すなわちＡ≦４×Ｂの場合は短軸の半分（Ｂ／２）とし、４：１より大きい、すなわちＡ＞４×Ｂの場合は短軸の１／４（Ｂ／４）とする。図６では第１象限のみしか示していないが、他の象限についても同様である。
【００３８】
図７は、本発明の第２の実施の形態におけるセグメントレングス算出時の径に応じた半径の計算の動作の一例を示すフローチャートである。図６に示した方法による径に応じた半径の計算動作を図７に示している。まずＳ４１において、長軸と短軸の径の比（Ａ／Ｂ）が１．５未満の場合は円と見なし、Ｓ４２において半径は短軸Ｂの半径が採用される。
【００３９】
長軸と短軸の径の比（Ａ／Ｂ）が１．５以上については楕円と見なし、図６に示したように各象限ごとに２つの領域に分けてそれぞれの領域ごとに半径を算出する。Ｓ４３において領域２に含まれるか否かを判定し、領域２に含まれると判断された場合はＳ４４において径の値に無関係に短軸の半分（Ｂ／２）を半径とする。領域１に含まれる場合は順にＳ４５およびＳ４７で径の比によって判定される。Ｓ４５において長軸と短軸の径の比（Ａ／Ｂ）が１．５以上２．５未満の場合には、Ｓ４６において径に応じた半径を長軸の径Ａと短軸の径Ｂの和とする。また、Ｓ４７において長軸と短軸の径の比（Ａ／Ｂ）が２．５以上３．５未満の場合には、Ｓ４８において径に応じた半径を長軸の径Ａと短軸の径Ｂの和の２倍とする。さらにそれ以上の場合には、Ｓ４９において径に応じた半径を長軸の径Ａと短軸の径Ｂの和の３倍とする。これらの径に応じた半径の値は一例であって、他の値としてもよい。
【００４０】
描画する図形が楕円あるいは楕円の場合に、上述のようにして径に応じた半径が算出された。また、描画する図形が円または円弧の場合には、初期値認識部１で半径が認識されている。これらの半径または径に応じた半径に基づき、直線近似しても画質劣化があまり認められない範囲で最も長い近似直線長を求める。図８は、本発明の第２の実施の形態における半径に基づく最大近似直線長の算出動作の一例を示すフローチャートである。ここでは、径に応じた半径も単に半径と呼んでいる。
【００４１】
最大近似直線長は半径によってＳ５１およびＳ５３によって３つに場合分けされ、それぞれＳ５２、Ｓ５４、Ｓ５５に示す実験から導いた計算式によって算出される。すなわち、Ｓ５１において半径が４００より小さいか否かを判定し、４００より小さい場合にはＳ５２において最大近似直線長を５＋０．０６２５×半径とする。また、Ｓ５３において半径が４００以上１０００未満か否かを判定し、その範囲内の場合にはＳ５４において最大近似直線長を２５＋０．０３１２５×半径とする。半径が１０００以上の場合には、最大近似直線長を５０＋０．００７８１×半径とする。Ｓ５２，Ｓ５４，Ｓ５５において用いた半径に乗ずる係数は、それぞれ２−４，２−５，２−７であり、計算機による２進の乗算をシフトによって行なえる値として計算速度を向上させている。このようにして求めた最大近似直線長は半径と比較され、どちらか短い方がセグメントレングスとして採用される。
【００４２】
図９は、本発明の第２の実施の形態において円弧セグメント座標発生部で発生される画素の座標と円弧セグメントの一例の説明図である。円弧セグメント座標発生部１２は、例えば、公知のＢｒｅｓｅｎｈａｍの円弧発生アルゴリズムなどに基づいて、セグメントの始点から順に図９に円で示した画素の座標を発生してゆく。図９では、セグメントの始点の画素を●で示し、順次生成される画素を○にハッチングを施して示している。また、セグメントの終点の画素を◎で示している。
【００４３】
セグメントの始点の画素●から、○にハッチングを施した画素の座標が順次生成されてゆく。その都度、移動距離演算部１３は、セグメントの始点の画素からの移動距離を演算する。そしてセグメント走査判定部１４によってセグメントレングス算出部１１で求めたセグメントレングスと、移動距離演算部１３で演算される移動距離を比較してセグメントの終点を判定する。図９では、◎で示した画素の座標が発生された時点で、移動距離演算部１３で演算された移動距離がセグメントレングスに達したとすると、セグメント走査判定部１４はこれを検出し、◎で示した画素がセグメントの終点であることを判定する。また、セグメント走査判定部１４は、移動距離がセグメントレングスに達する前に描画終了点に達した場合には、その描画終了点をセグメントの終点と判定する。セグメントの終点が検出された場合は、円弧セグメント座標発生部１２から、セグメントの始点および終点の座標をセグメント始点・終点格納部３に送る。
【００４４】
図１０は、移動距離演算部の動作の一例の説明図である。この例では、移動距離の演算誤差を低減するために、移動距離演算部２３は、過去に発生した２画素の座標までさかのぼり、これら２つの座標間の距離を用いて演算を行なう。図１０に示すように、現時点で最後に発生した画素（以下現画素と呼ぶ）Ｐｎからの次に新しく発生する画素（以下次画素と呼ぶ）Ｐｎ＋１が発生されると、移動距離演算部１３はまず次画素までの暫定移動距離Ｐｎ〜Ｐｎ＋１を演算する。このとき、隣接する座標間の単位距離をｘ軸方向、ｙ軸方向ともに１とすると、画像は格子状に画素が存在するため暫定移動距離は１．０または√２のいずれかである。さらに移動距離演算部１３が保持している現画素の前に発生した画素（以下前画素と呼ぶ）からの移動距離Ｐｎ−１〜Ｐｎおよび先の暫定移動距離Ｐｎ〜Ｐｎ＋１に基づいて新たに次画素までの移動距離Ｐｎ〜Ｐｎ＋１を算出する。すなわち、連続する画素の移動距離の値が１．０および√２または√２および１．０の場合のみ、これらをまとめてピタゴラスの定理により√５とする。
【００４５】
図１１に示す例では、Ｐｎ−１〜Ｐｎ＝１．０、Ｐｎ〜Ｐｎ＋１＝√２よりＰｎ−１〜Ｐｎ＋１＝√５となるように、新たにＰｎ〜Ｐｎ＋１＝（√５−１．０）を移動距離として出力する。移動距離の演算後、Ｐｎ〜Ｐｎ＋１の値（√５−１．０）は、Ｐｎ＋１からＰｎ＋２までの移動距離の算出のために、移動距離演算部２３内に保持される。
【００４６】
図１１は、移動距離演算部の動作の一例を示すフローチャートである。Ｓ６１において、円弧セグメント座標発生部１２が発生した次画素までの暫定移動距離を入力する。以下この暫定移動距離の値をＤｎとする。また、移動距離演算部１３内で保持している前画素からの移動距離を入力する。以下、この移動距離の値をＤｐとする。
【００４７】
移動距離演算部１３は、暫定移動距離Ｄｎおよび移動距離Ｄｐの値に応じて場合分けを行ない、それぞれの場合の加算距離を求める。Ｓ６２において暫定移動距離Ｄｎが１であるか否かを判定する。暫定移動距離Ｄｎが１である場合には、さらにＳ６３において移動距離Ｄｐが√２であるか否かを判定する。移動距離Ｄｐが√２でなければ、Ｓ６４において、現座標Ｐｎから次座標Ｐｎ＋１までの加算距離を１として、累積距離に加算する。また、移動距離Ｄｐが√２である場合には、Ｓ６５において、現座標Ｐｎから次座標Ｐｎ＋１までの加算距離を√５−√２として、累積距離に加算する。Ｓ６２において暫定移動距離Ｄｎが１でないと判定された場合には、さらにＳ６６において移動距離Ｄｐが１であるか否かを判定する。移動距離Ｄｐが１であれば、Ｓ６７において、現座標Ｐｎから次座標Ｐｎ＋１までの加算距離を√５−１として、累積距離に加算する。また、移動距離Ｄｐが１でない場合には、Ｓ６８において、現座標Ｐｎから次座標Ｐｎ＋１までの加算距離を√２として、累積距離に加算する。
【００４８】
この第２の実施の形態は、第１の実施の形態における円弧セグメント走査部２の構成の一例を示したものである。セグメント始点・終点格納部３にセグメントの始点、終点の画素の座標が格納された後の処理は上述の第１の実施の形態と同様であるのでここでは説明を省略する。
【００４９】
図１２は、本発明の図形太線描画装置の第３の実施の形態を示すブロック図である。図中、図１と同様の部分には同じ符号を付して説明を省略する。２１は画素抜け判定部、２２は法線ベクトル描画部、２３はセグメント終了条件判定部である。この第３の実施の形態では、上述の第１の実施の形態における描画部７の具体例を示している。この実施の形態を用いて、主に法線ベクトルを用いた描画処理について詳述する。
【００５０】
画素抜け判定部２１は、円弧座標発生部６で発生した円弧上の画素の座標をもとに、法線ベクトル生成部５で生成された法線ベクトルによる描画の際に画素抜けが発生するか否かを判定し、円弧上の画素の座標とともに判定結果を法線ベクトル描画部２２に伝える。
【００５１】
法線ベクトル描画部２２は、円弧座標発生部６で発生した円弧上の画素の座標をもとに、その画素を始点として、法線ベクトル生成部５で生成した法線ベクトルを描画する。また、画素抜け判定部２１で画素抜けが発生すると判定されている場合には、画素抜けの除去も行なう。
【００５２】
セグメント終了条件判定部２３は、円弧座標発生部６によって発生された円弧上の画素がセグメントの終点に達したか否かを判定し、セグメントの終点に達していない場合には、円弧座標発生部６に対して次の円弧上の画素の座標の発生を指示する。
【００５３】
次に、本発明の第３の実施の形態における動作の一例について、具体例を用いながら説明する。ここでは、セグメント始点・終点格納部３にセグメントの始点および終点の画素の座標が格納された後の処理について説明する。具体例として、図９に示すようにセグメントの始点の画素●と終点の画素◎の座標がセグメント始点・終点格納部３に格納されているものとする。
【００５４】
図１３は、本発明の第３の実施の形態における法線ベクトルの作成過程の説明図である。直線座標発生部４は、セグメント始点・終点格納部３に保持されているセグメントの始点および終点の画素の座標に基づいて、図１３に示すようにセグメントの始点から終点の方向への直線上の画素の座標を発生する。図１３では、発生された画素を○に×を施して示している。セグメントの始点から発生した画素の座標までの距離の計算は上述の第２の実施の形態における移動距離演算部１３における処理と同様にして求めることができる。そして、計算された距離と線幅とを比較することによって、線幅分の直線上の画素が生成されたか否かを判定することができる。
【００５５】
法線ベクトル生成部５は、直線座標発生部４において線幅分だけ発生された画素の座標をもとに、それらをセグメントの始点を中心として９０°回転し、図１３において●で示す画素列のように、セグメントの始点から終点方向に直交し長さが線幅となる法線ベクトルを生成する。
【００５６】
図１４は、本発明の第３の実施の形態における法線ベクトルに基づくセグメントの描画過程の説明図である。法線ベクトル生成部５において法線ベクトルが生成された後に、円弧座標発生部６は、例えば、Ｂｒｅｓｅｎｈａｍの円弧発生アルゴリズム等を用いて、セグメントの始点から終点までの円弧上の画素の座標を順次発生する。そして法線ベクトル描画部２２は、円弧座標発生部６で発生した座標を法線ベクトルの始点として、法線ベクトル生成部５で生成した法線ベクトルの描画を行なう。この法線ベクトルの描画を、円弧座標発生部６で発生した座標ごとに行なってゆく。
【００５７】
ただし、図１４に示すように、円弧上の画素が斜めに移動した場合は、図１４に△で示す画素のように、画素抜けが生じる。そのため、画素抜け判定部２１は、円弧座標発生部６で発生された円弧上の画素の座標に基づいて、画素が斜めに移動したことを検出して画素抜けと判定する。画素抜けとなる画素は法線ベクトル描画部２２において埋められ、画素抜けが除去される。
【００５８】
円弧座標発生部６による円弧上の画素の座標の発生は、セグメント終了条件判定部２３がセグメントの終点を判定するまで行なわれ、セグメントの終点に達したらセグメント内の描画を終了する。これにより、図１４に示すように１つのセグメントにおける描画が行なわれる。このとき、△で示す画素抜けの箇所も埋められている。描画されたセグメントレングスだけの図形は、円弧上の画素を始点として法線ベクトルを描画しているので、法線ベクトルの終点の画素が形成する図形の形状も円弧となり、画質を向上させることができる。また、線幅に応じた法線ベクトルを用いているため、線幅は均一となる。
【００５９】
さらに、終了条件判定部８が最終的な終点を認識するまでセグメントごとに以上の処理を行ない、描画開始点から描画終了点までの線が描画される。このとき、各セグメントの境界部では、法線ベクトルを曲線の内側となるように発生させることによって、２つのセグメントの端部が隣接あるいは多少重複するように描画される。そのため、セグメント間で画素抜けなどは発生しない。
【００６０】
上述の例では、法線ベクトルを曲線の内側に発生させるため、円や楕円の中心の回りに反時計方向に円弧や楕円弧の走査を行なうものとし、法線ベクトルを生成する際にもセグメントの始点を中心に反時計方向に９０゜回転させている。もちろん、時計方向に円弧や楕円弧を走査しまた法線ベクトルを回転させる構成でもよい。また、円弧や楕円湖の走査方向と法線ベクトルの回転方向を異ならせ、法線ベクトルの終点を円弧座標発生部６で発生した円弧上の画素に合わせて描画するように構成することもできる。
【００６１】
また、上述の第１の実施の形態で説明したように、本発明では特定のパターンに従って描画と抑止を切り替えながら処理することにより、破線や点線、鎖線などの描画が可能であるが、このような描画と抑止の切換処理は、例えば、円弧座標発生部６において円弧上の画素の座標を発生させる際に、描画部分の円弧上の画素の座標のみを描画部７に渡すように構成するほか、描画部７内の法線ベクトル描画部２２において法線ベクトルを描画する際に特定のパターンに従って法線ベクトルを描画するか否かを判定しながら描画を行なうように構成することもできる。
【００６２】
なお、上述の第２の実施の形態では円弧セグメント走査部２の内部構成の一例を、また、第３の実施の形態では描画部７の内部構成の一例をそれぞれ示したが、これらを組み合わせて構成してもよい。
【００６３】
【発明の効果】
以上の説明から明らかなように、本発明によれば、円、円弧、楕円および楕円弧のどの位置においても、所望の線幅を一定に保ち、しかも内外周とも円弧上の画素が用いられるため、画質のよい図形を描画することができる。また、端点形状は描画方向に直交した直線で描画することができる。さらに、破線などを描画させる場合にも、簡単な制御のみによって描画することができるとともに、描画された破線などは各線素が揃い、線素間の間隔も揃った、高画質の破線などを得ることができるという効果がある。
【図面の簡単な説明】
【図１】本発明の図形描画装置の第１の実施の形態を示すブロック図である。
【図２】本発明の図形描画装置の第１の実施の形態における描画手順の一例の説明図である。
【図３】本発明の図形描画装置の第１の実施の形態における破線の描画の一例の説明図である。
【図４】本発明の図形描画装置の第２の実施の形態を示すブロック図である。
【図５】本発明の第２の実施の形態におけるセグメントレングス算出部の動作の一例を示すフローチャートである。
【図６】本発明の第２の実施の形態におけるセグメントレングス算出時の径に応じた半径計算の動作の一例の説明図である。
【図７】本発明の第２の実施の形態におけるセグメントレングス算出時の径に応じた半径の計算の動作の一例を示すフローチャートである。
【図８】本発明の第２の実施の形態における半径に基づく最大近似直線長の算出動作の一例を示すフローチャートである。
【図９】本発明の第２の実施の形態において円弧セグメント座標発生部で発生される画素の座標と円弧セグメントの一例の説明図である。
【図１０】移動距離演算部の動作の一例の説明図である。
【図１１】移動距離演算部の動作の一例を示すフローチャートである。
【図１２】本発明の図形太線描画装置の第３の実施の形態を示すブロック図である。
【図１３】本発明の第３の実施の形態における法線ベクトルの作成過程の説明図である。
【図１４】本発明の第３の実施の形態における法線ベクトルに基づくセグメントの描画過程の説明図である。
【図１５】従来の線分描画方法の描画手順の説明図である。
【図１６】曲線を短い直線に近似して描画する従来の線分描画方法の描画手順の説明図である。
【符号の説明】
１…初期値認識部、２…円弧セグメント走査部、３…セグメント始点・終点格納部、４…直線座標発生部、５…法線ベクトル生成部、６…円弧座標発生部、７…描画部、８…終了条件判定部、９…フレームメモリ、１１…セグメントレングス算出部、１２…円弧セグメント座標発生部、１３…移動距離演算部、１４…セグメント走査判定部、２１…画素抜け判定部、２２…法線ベクトル描画部、２３…セグメント終了条件判定部。
【図１】
0003555316.tif 000002
【図２】
0003555316.tif 000003
【図３】
0003555316.tif 000004
【図４】
0003555316.tif 000005
【図５】
0003555316.tif 000006
【図６】
0003555316.tif 000007
【図７】
0003555316.tif 000008
【図８】
0003555316.tif 000009
【図９】
0003555316.tif 000010
【図１０】
0003555316.tif 000011
【図１１】
0003555316.tif 000012
【図１２】
0003555316.tif 000013
【図１３】
0003555316.tif 000014
【図１４】
0003555316.tif 000015
【図１５】
0003555316.tif 000016
【図１６】
0003555316.tif 000017