JP3555316B2 - 図形描画装置 - Google Patents
図形描画装置 Download PDFInfo
- Publication number
- JP3555316B2 JP3555316B2 JP07900196A JP7900196A JP3555316B2 JP 3555316 B2 JP3555316 B2 JP 3555316B2 JP 07900196 A JP07900196 A JP 07900196A JP 7900196 A JP7900196 A JP 7900196A JP 3555316 B2 JP3555316 B2 JP 3555316B2
- Authority
- JP
- Japan
- Prior art keywords
- arc
- segment
- coordinates
- line
- end point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Image Generation (AREA)
- Controls And Circuits For Display Device (AREA)
Description
【発明の属する技術分野】
本発明は、図形描画装置に関するものであり、特に線幅のある円、円弧、楕円および楕円弧などを高品質に描画する図形太線描画装置に関するものである。
【0002】
【従来の技術】
近年、CAD(Computer Aided Design)システムやコンピュータグラフィックス等において、図形や文字を出力する装置であるプリンタやプロッタ等の解像度が高くなっている。解像度が高くなればなるほど図形や文字はより美しく出力される。しかしながら、高解像度化に伴い1ドット幅の線が非常に細くなり実用的でないため、2ドット以上の線幅を有する線で描画する機能が必要になっている。また、CADシステムにおいて円、円弧、楕円および楕円弧はそれらを組み合せることで曲線を表現することもできる。さらに、実線だけでなく一点鎖線や点線、破線といった線種もよく使用される。
【0003】
従来の図形描画装置は、線の太い円・円弧を描画するときには、次に述べる方法がとられてきた。図15は、従来の線分描画方法の描画手順の説明図である。まず、図15(A)に示す描画方法では、公知のBresenhamの円弧発生アルゴリズムによって線幅1画素の円弧は高速に発生することができるため、この円弧を数本重ねることによって太線を描画している。この方式の具体例としては、例えば、直線についての例が特開平5−233821号公報等に記載されている。
【0004】
次に、図15(B)に示す描画方法は、描画したい円弧の輪郭線を予め描画して、その後、一般的な塗りつぶし処理を用いて太線を描画している。この方式の具体例としては、例えば、直線についての例が特開平4−205575号公報、特開平4−77977号公報、特開平5−67215号公報等に記載されている。
【0005】
さらに、図15(C)に示す描画方法は、目的の線幅を直径とする円形の画素パターンを円弧の始点から終点まで公知のBresenhamの円弧発生アルゴリズムに基づいて1画素ずつ移動させ、画素パターン内を塗りつぶしていくことで描画する。
【0006】
また、図15(D)に示す描画方式は、曲線を直線近似して描画する方法である。この方式の具体例として、例えば、特開平4−128980公報等に示されている。
【0007】
ところで、描画される円の画質または精度は、円周上のどの位置においても線幅が一定であることである。また破線等を描画する場合においても、破線の線分長と線分間隔および線幅が円周上のどの位置においても一定であることが画質または精度を決める。さらに各線分の端点の形状を描画方向に直交した直線にそろえる必要がある。
【0008】
このような観点から従来の各描画方法を検討すると、まず図15(A)に示す描画方法では、円周上のどの位置においても線幅を一定にするために必要な細線の本数を算出することは難しい。また、破線を描画する場合、破線の各線分全ての端点を描画方向に直交した直線で切り取ってそろえるように細線の描画を制御することは困難である。
【0009】
また、図15(B)に示す描画方法では、破線を描画する場合は破線の各線分ごとに端点形状まで含めた輪郭線を求める必要があり、既存の塗りつぶし方式を用いた際に処理が複雑になることや、膨大なメモリを必要とする可能性があるなどの問題がある。また、特に楕円の輪郭線を描画する場合は、ある楕円から内側または外側に線幅長離れた楕円の輪郭線を描画するために必要なBresenhamの円弧発生アルゴリズムのパラメータを特定することは困難である。
【0010】
図15(C)に示す描画方法では、円形の画素パターンを用いているので、円、円弧、楕円、楕円弧のどの位置においても線幅をほぼ一定にすることができる。しかし、端点の形状は半円形状に限られ、例えば、破線を描画した場合には、端点の形状は画素パターンの半円の形状のままとなり、さらに画素パターンの直径より短い長さの線分を描画しようとするとそのままでは描画することができないという問題を有している。
【0011】
次に図15(D)に示す描画方法について検討する。図16は、曲線を短い直線に近似して描画する従来の線分描画方法の描画手順の説明図である。図16に示すように、この方式は、発生させようとする曲線のなかでX軸方向、Y軸方向、斜め方向だけに連続する直線画素列を取り出し、その画素列を所望の線幅の線分として元の画像にマッピングする方式である。図16(A)に示すような曲線を3画素幅で発生させる場合、図16(A)の周囲に示す5つの直線画素列に分割し、それぞれを3画素幅として書き戻す。これにより図16(B)に示す3画素幅の曲線を得ることができる。
【0012】
この方式において、例えば、破線を描画しようとすると、各線分中の各画素または線分ごとに描画するか否かを切り替えることによって可能であると思われる。しかしこの方式では、斜めに描画する線分の線幅が正確でないため、破線の画質が劣化し、さらに破線の各線分は3種類の方向しか持たない直線によって成り立つため常に各線分の切り口を描画方向に直交した直線にそろえることが難しいという問題を有している。
【0013】
以上のことから、従来の描画方法で円、円弧、楕円、楕円弧の描画を高品質に行なうことは困難である。また、破線や点線などを高品質に描画することに対しては、ほとんど考慮されていないのが現状である。
【0014】
【発明が解決しようとする課題】
本発明は、上述した事情に鑑みてなされたもので、円、円弧、楕円および楕円弧のどの位置においても、所望の線幅を一定に保ちながら高画質に描画を行ない、さらに鎖線や破線、点線など、実線以外の線種についても、各線素の線分長と線分間隔および線幅を一定に保ちながら高画質に描画を行なうことのできる図形描画装置を提供することを目的とするものである。
【0015】
【課題を解決するための手段】
請求項1に記載の発明は、円、円弧、楕円および楕円弧を描画する機能を有する図形描画装置において、入力された情報から描画する円、円弧、楕円および楕円弧の大きさと線の太さを認識する初期値認識手段と、該初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる近似直線の線分長と等しい円弧長となる座標を順次生成する円弧セグメント走査手段と、該円弧セグメント走査手段が生成した座標を円、円弧、楕円および楕円弧を近似する線分の始点と終点の座標として順次保持するセグメント始点・終点格納手段と、前記始点と終点間の円弧上の座標を生成する円弧座標発生手段と、前記始点と終点とを結ぶ直線上の座標を生成する直線座標発生手段と、該直線座標発生手段が生成した座標を基に前記始点と終点とを結ぶ直線に直交しかつ前記初期値認識手段で認識された線幅と等しい長さを有する画素列を生成する法線ベクトル生成手段と、該法線ベクトル生成手段で生成された画素列を前記円弧座標発生手段が生成した座標毎に発生させ描画を行なう描画手段を備えたことを特徴とするものである。
【0016】
請求項2に記載の発明は、請求項1に記載の図形描画装置において、前記円弧セグメント走査手段は、前記初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さに基づいて円弧上の座標を生成する円弧セグメント座標発生手段と、該円弧セグメント座標発生手段が生成した座標の移動距離を演算する距離演算手段と、前記初期値認識手段が認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる線分長を算出するセグメントレングス算出手段と、該セグメントレングス算出手段が求めた線分長を前記移動距離演算手段が求めた移動距離が上回るか否かを判定するセグメント走査判定手段を備えていることを特徴とするものである。
【0017】
請求項3に記載の発明は、請求項1または2に記載の図形描画装置において、前記描画手段は、前記円弧座標発生手段が求めた円弧座標に基づいて画素抜けの発生を判定する画素抜け判定手段と、円弧画素を始点とした法線ベクトルに沿って描画する法線ベクトル描画手段と、該法線ベクトル描画手段による描画が前記セグメントの終点まで終了したか否かを判定するセグメント終了条件判定手段を備えていることを特徴とするものである。
【0018】
請求項4に記載の発明は、請求項1ないし3のいずれか1項に記載の図形描画装置において、前記円弧座標発生手段は、前記始点と終点間の円弧上の座標を生成する際に、描画する線種に従って前記円弧上の少なくとも一部の座標のみを生成することを特徴とするものである。
【0019】
【発明の実施の形態】
図1は、本発明の図形描画装置の第1の実施の形態を示すブロック図である。図中、1は初期値認識部、2は円弧セグメント走査部、3はセグメント始点・終点格納部、4は直線座標発生部、5は法線ベクトル生成部、6は円弧座標発生部、7は描画部、8は終了条件判定部、9はフレームメモリである。
【0020】
初期値認識部1は、描画する円、円弧、楕円および楕円弧の大きさと線の太さを認識する。円、円弧の大きさとしては半径を、また楕円、楕円弧の場合はX軸およびY軸の径を認識する。さらに円弧、楕円弧の場合には、描画開始点と描画終了点の座標、あるいは描画開始点または描画終了点の座標と中心角、または、描画開始点および描画終了点の存在するある方向からの角度等を認識する。これらは、キーボードやマウスなどの入力装置から入力されたり、あるいはファイルや他の計算機から与えられるページ記述言語等で記述された描画データを解釈することで得られる。
【0021】
円弧セグメント走査部2は、円、円弧、楕円、および楕円弧を直線で近似して描画するために最適な線分長と等しい長さだけ、円弧上の座標を走査する。この線分長の区間をセグメントと呼び、線分長をセグメントレングスと呼ぶ。セグメントレングスは、円と円弧の場合には半径と線幅から、また楕円と楕円弧の場合にはX軸およびY軸の径、X軸の径とY軸の径の比および線幅から求めることができる。円弧座標上をセグメントレングスと等しい長さだけ走査することでセグメントの始点と終点が求められる。セグメント始点・終点格納部3は、円弧セグメント走査部2で求められたセグメントの始点および終点の座標を一時保持する。
【0022】
直線座標発生部4は、セグメント始点・終点格納部3に保持されているセグメントの始点から終点までの直線座標を、例えばDDA等によって発生する。法線ベクトル生成部5は、直線座標発生部4で発生した直線座標に対応する画素列を、線幅分のみ90°回転させることによって、セグメントの始点と終点を結ぶ直線に直交する法線ベクトルを生成する。円弧座標発生部6は、セグメント始点・終点格納部3に保持されているセグメントの始点および終点間の円弧上の座標を発生する。円弧上の座標の発生には、例えばBresenhamの円弧発生アルゴリズム等を用いることができる。
【0023】
描画部7は、円弧座標発生部6で発生した円弧上の各座標を法線ベクトル生成部5で生成した法線ベクトルの始点として、法線ベクトルを構成する画素列を描画する。このとき、隣り合う法線ベクトル間に描画されない画素が生じる場合は、その画素の描画も行なう。終了条件判定部8は、描画開始点から描画終了点までの描画が終了したか否かを判定し、描画終了点までの描画が終了していない間は、円弧セグメント走査部2以降の処理を繰り返し行なわせる。フレームメモリ9は、描画部7で描画された画像を保持する。
【0024】
図2は、本発明の図形描画装置の第1の実施の形態における描画手順の一例の説明図である。ここでは、描画開始点から描画終了点までのある線幅の円弧を描画する場合を例にして説明する。初期値認識部1は、描画する円弧の半径、描画開始点、描画終了点、線幅などを認識する。
【0025】
円弧セグメント走査部2は、円弧上の始点から、円弧内で円弧上の画素の接線のなす角度がほぼ等しいと見なせる最大の円弧長だけ走査し、セグメントの終点を求める。図2では一部のセグメントについて示しており、例えば円弧上の点aを始点とし、走査して得たセグメントの終点bを求める。求めたセグメントの始点aと終点bの座標は、セグメント始点・終点格納部3に一時保持される。
【0026】
次に、直線座標発生部4がセグメント始点・終点格納部3に格納されているセグメントの始点aら終点bを通過する直線上を線幅長だけ走査し、直線上の画素の座標を発生する。法線ベクトル生成部5は、直線座標発生部4で発生した座標を、セグメントの始点aを中心に90゜回転させて法線ベクトルa−a’を生成する。
【0027】
一方、円弧座標発生部6は、セグメント始点・終点格納部3に格納されているセグメントの始点aと終点bの間の円弧ab上の画素の座標を点aから順に発生する。描画部7は、円弧座標発生部6で発生した円弧ab上の各画素の座標について、その座標を法線ベクトルの始点として、法線ベクトル生成部5で生成した法線ベクトルa−a’を構成する画素列を描画する。図2では、描画した法線ベクトルを細矢印で示している。このとき、隣り合う法線ベクトル間に描画されない画素が生じる場合は、その画素の描画も行なう。このようにして、始点aと終点bの間のセグメントの描画が終了する。
【0028】
終了条件判定部8は、終点bが描画終了点でないことを確認し、点bを始点とする新たなセグメントの処理を開始させる。以下同様にして、順次セグメントへの分割と、各セグメントにおける描画処理が行なわれる。このようにして、描画開始点から描画終了点まで、指定された線幅の円弧がフレームメモリ9内に描画される。
【0029】
このようにして描画された円弧の外周は、円弧座標発生部6で発生した円弧上の画素がそのまま用いられるため、画質の劣化が少ない。また、線幅は法線ベクトルによって描画されるので、円周上のどの位置においても正確で一定であり、端点形状は直線で描画方向に直交する。
【0030】
また、法線ベクトルを特定パターンに従って描画と抑止を切り替えながら処理することにより、破線や点線、鎖線などが高精度に描画可能となる。図3は、本発明の図形描画装置の第1の実施の形態における破線の描画の一例の説明図である。図3では簡単のため、それぞれのセグメントは6本の法線ベクトルを含むものとし、5ドットごとに描画と抑止を切り替えながら処理するものとする。このような処理は、例えば円弧座標発生部6が発生した円弧上の画素の座標を、描画部7に5つ送った後の5つは送らずに捨てるように制御ればよい。このような簡単な制御により、図3に示すように、各線素の幅、長さ、線素間の間隔、線素の形状の揃った、高品質の破線などを描画することができる。円弧座標発生部6で発生した円弧上の画素の座標を描画部7に送る規則(特定パターン)を変更するだけで、線素の長さや線素間の間隔を変更でき、また、1点鎖線や2点鎖線などの鎖線も描画可能である。この特定パターンは数値によって予め与えておくほか、例えば関数を与えておき、線幅に従って決定したり、半径や曲率などに従って動的に決定するように構成することも可能である。
【0031】
また、法線ベクトルを生成した際に、画素を抜くことによって2重線などの多重線を描くことも可能である。このときの線の間の幅も一定となる。さらに抜く画素を周期的に変化させることによって波線も可能であり、これらと破線などの線種を組み合わせることも可能である。
【0032】
図4は、本発明の図形描画装置の第2の実施の形態を示すブロック図である。図中、図1と同様の部分には同じ符号を付して説明を省略する。11はセグメントレングス算出部、12は円弧セグメント座標発生部、13は移動距離演算部、14はセグメント走査判定部である。この第2の実施の形態では、上述の第1の実施の形態における円弧セグメント走査部2の具体例を示している。この実施の形態を用いて、主にセグメントの処理について詳述する。
【0033】
セグメントレングス算出部11は、初期値認識部1で認識した描画する曲線の描画開始点と描画終了点の座標、線幅、楕円の場合はX軸およびY軸の径に基づいてセグメントの長さであるセグメントレングスを算出する。円弧セグメント座標発生部12は、円弧上の画素の座標を順次発生する。円弧上の画素の座標は、例えば、公知のBresenhamの円弧発生アルゴリズムを用いて発生させることができる。移動距離演算部13は、セグメントの始点となる画素の座標から、円弧セグメント座標発生部12が発生した画素の座標までの移動距離を演算する。セグメント走査判定部14は、セグメントレングス算出部11で求めたセグメントレングスと、移動距離演算部13で演算される移動距離を比較してセグメントの走査の終了を判定し、終了した場合は円弧セグメント座標発生部12がセグメントの始点および終点をセグメント始点・終点格納部3に送る。
【0034】
次に、本発明の図形描画装置の第2の実施の形態における動作について説明する。図5は、本発明の第2の実施の形態におけるセグメントレングス算出部の動作の一例を示すフローチャートである。S31において、描画する曲線が円または円弧か、あるいは楕円または楕円弧かを判定する。円または円弧であれば、初期値認識部1の認識している半径を以下の最大近似直線長の計算に用いる半径とする。また、楕円または楕円弧であれば、S32において、初期値認識部1が認識している楕円の長軸および短軸の径の値から、最大近似直線長の計算に用いる半径(以下この半径を、径に応じた半径と呼ぶ)の算出を行なう。この処理は後述する。
【0035】
次に、S33において、円の半径、あるいは楕円の場合はS32で算出された径に応じた半径に基づき、直線近似しても画質劣化があまり認められない範囲で最も長い近似直線長を求める。この処理についても後述する。
【0036】
そして、S34において、初期値認識部1で認識された線幅と、S33で算出された最大の近似直線長を比較し、小さい方をセグメントレングスとする。すなわち、最大の近似直線長が線幅以上の場合にはS35においてセグメントレングスを線幅とし、線幅の方が最大の近似直線長よりも長い場合にはS36においてセグメントレングスを最大近似直線長とする。このようにして、セグメントレングス算出部11においてセグメントレングスが算出される。
【0037】
図6は、本発明の第2の実施の形態におけるセグメントレングス算出時の径に応じた半径計算の動作の一例の説明図である。この径に応じた半径を簡単に求めるため、この例ではカーブの急な領域と緩やかな領域に分け、それぞれの領域について便宜上の径に応じた半径を決定している。図6に示すように、長軸との交点およびその付近をカーブの急な領域2とし、短軸との交点およびその付近をカーブの緩やかな領域1としている。そして、2つの領域に分けるためのしきい値Thは、長軸と短軸の径の比が4:1以下、すなわちA≦4×Bの場合は短軸の半分(B/2)とし、4:1より大きい、すなわちA>4×Bの場合は短軸の1/4(B/4)とする。図6では第1象限のみしか示していないが、他の象限についても同様である。
【0038】
図7は、本発明の第2の実施の形態におけるセグメントレングス算出時の径に応じた半径の計算の動作の一例を示すフローチャートである。図6に示した方法による径に応じた半径の計算動作を図7に示している。まずS41において、長軸と短軸の径の比(A/B)が1.5未満の場合は円と見なし、S42において半径は短軸Bの半径が採用される。
【0039】
長軸と短軸の径の比(A/B)が1.5以上については楕円と見なし、図6に示したように各象限ごとに2つの領域に分けてそれぞれの領域ごとに半径を算出する。S43において領域2に含まれるか否かを判定し、領域2に含まれると判断された場合はS44において径の値に無関係に短軸の半分(B/2)を半径とする。領域1に含まれる場合は順にS45およびS47で径の比によって判定される。S45において長軸と短軸の径の比(A/B)が1.5以上2.5未満の場合には、S46において径に応じた半径を長軸の径Aと短軸の径Bの和とする。また、S47において長軸と短軸の径の比(A/B)が2.5以上3.5未満の場合には、S48において径に応じた半径を長軸の径Aと短軸の径Bの和の2倍とする。さらにそれ以上の場合には、S49において径に応じた半径を長軸の径Aと短軸の径Bの和の3倍とする。これらの径に応じた半径の値は一例であって、他の値としてもよい。
【0040】
描画する図形が楕円あるいは楕円の場合に、上述のようにして径に応じた半径が算出された。また、描画する図形が円または円弧の場合には、初期値認識部1で半径が認識されている。これらの半径または径に応じた半径に基づき、直線近似しても画質劣化があまり認められない範囲で最も長い近似直線長を求める。図8は、本発明の第2の実施の形態における半径に基づく最大近似直線長の算出動作の一例を示すフローチャートである。ここでは、径に応じた半径も単に半径と呼んでいる。
【0041】
最大近似直線長は半径によってS51およびS53によって3つに場合分けされ、それぞれS52、S54、S55に示す実験から導いた計算式によって算出される。すなわち、S51において半径が400より小さいか否かを判定し、400より小さい場合にはS52において最大近似直線長を5+0.0625×半径とする。また、S53において半径が400以上1000未満か否かを判定し、その範囲内の場合にはS54において最大近似直線長を25+0.03125×半径とする。半径が1000以上の場合には、最大近似直線長を50+0.00781×半径とする。S52,S54,S55において用いた半径に乗ずる係数は、それぞれ2−4,2−5,2−7であり、計算機による2進の乗算をシフトによって行なえる値として計算速度を向上させている。このようにして求めた最大近似直線長は半径と比較され、どちらか短い方がセグメントレングスとして採用される。
【0042】
図9は、本発明の第2の実施の形態において円弧セグメント座標発生部で発生される画素の座標と円弧セグメントの一例の説明図である。円弧セグメント座標発生部12は、例えば、公知のBresenhamの円弧発生アルゴリズムなどに基づいて、セグメントの始点から順に図9に円で示した画素の座標を発生してゆく。図9では、セグメントの始点の画素を●で示し、順次生成される画素を○にハッチングを施して示している。また、セグメントの終点の画素を◎で示している。
【0043】
セグメントの始点の画素●から、○にハッチングを施した画素の座標が順次生成されてゆく。その都度、移動距離演算部13は、セグメントの始点の画素からの移動距離を演算する。そしてセグメント走査判定部14によってセグメントレングス算出部11で求めたセグメントレングスと、移動距離演算部13で演算される移動距離を比較してセグメントの終点を判定する。図9では、◎で示した画素の座標が発生された時点で、移動距離演算部13で演算された移動距離がセグメントレングスに達したとすると、セグメント走査判定部14はこれを検出し、◎で示した画素がセグメントの終点であることを判定する。また、セグメント走査判定部14は、移動距離がセグメントレングスに達する前に描画終了点に達した場合には、その描画終了点をセグメントの終点と判定する。セグメントの終点が検出された場合は、円弧セグメント座標発生部12から、セグメントの始点および終点の座標をセグメント始点・終点格納部3に送る。
【0044】
図10は、移動距離演算部の動作の一例の説明図である。この例では、移動距離の演算誤差を低減するために、移動距離演算部23は、過去に発生した2画素の座標までさかのぼり、これら2つの座標間の距離を用いて演算を行なう。図10に示すように、現時点で最後に発生した画素(以下現画素と呼ぶ)Pnからの次に新しく発生する画素(以下次画素と呼ぶ)Pn+1が発生されると、移動距離演算部13はまず次画素までの暫定移動距離Pn〜Pn+1を演算する。このとき、隣接する座標間の単位距離をx軸方向、y軸方向ともに1とすると、画像は格子状に画素が存在するため暫定移動距離は1.0または√2のいずれかである。さらに移動距離演算部13が保持している現画素の前に発生した画素(以下前画素と呼ぶ)からの移動距離Pn−1〜Pnおよび先の暫定移動距離Pn〜Pn+1に基づいて新たに次画素までの移動距離Pn〜Pn+1を算出する。すなわち、連続する画素の移動距離の値が1.0および√2または√2および1.0の場合のみ、これらをまとめてピタゴラスの定理により√5とする。
【0045】
図11に示す例では、Pn−1〜Pn=1.0、Pn〜Pn+1=√2よりPn−1〜Pn+1=√5となるように、新たにPn〜Pn+1=(√5−1.0)を移動距離として出力する。移動距離の演算後、Pn〜Pn+1の値(√5−1.0)は、Pn+1からPn+2までの移動距離の算出のために、移動距離演算部23内に保持される。
【0046】
図11は、移動距離演算部の動作の一例を示すフローチャートである。S61において、円弧セグメント座標発生部12が発生した次画素までの暫定移動距離を入力する。以下この暫定移動距離の値をDnとする。また、移動距離演算部13内で保持している前画素からの移動距離を入力する。以下、この移動距離の値をDpとする。
【0047】
移動距離演算部13は、暫定移動距離Dnおよび移動距離Dpの値に応じて場合分けを行ない、それぞれの場合の加算距離を求める。S62において暫定移動距離Dnが1であるか否かを判定する。暫定移動距離Dnが1である場合には、さらにS63において移動距離Dpが√2であるか否かを判定する。移動距離Dpが√2でなければ、S64において、現座標Pnから次座標Pn+1までの加算距離を1として、累積距離に加算する。また、移動距離Dpが√2である場合には、S65において、現座標Pnから次座標Pn+1までの加算距離を√5−√2として、累積距離に加算する。S62において暫定移動距離Dnが1でないと判定された場合には、さらにS66において移動距離Dpが1であるか否かを判定する。移動距離Dpが1であれば、S67において、現座標Pnから次座標Pn+1までの加算距離を√5−1として、累積距離に加算する。また、移動距離Dpが1でない場合には、S68において、現座標Pnから次座標Pn+1までの加算距離を√2として、累積距離に加算する。
【0048】
この第2の実施の形態は、第1の実施の形態における円弧セグメント走査部2の構成の一例を示したものである。セグメント始点・終点格納部3にセグメントの始点、終点の画素の座標が格納された後の処理は上述の第1の実施の形態と同様であるのでここでは説明を省略する。
【0049】
図12は、本発明の図形太線描画装置の第3の実施の形態を示すブロック図である。図中、図1と同様の部分には同じ符号を付して説明を省略する。21は画素抜け判定部、22は法線ベクトル描画部、23はセグメント終了条件判定部である。この第3の実施の形態では、上述の第1の実施の形態における描画部7の具体例を示している。この実施の形態を用いて、主に法線ベクトルを用いた描画処理について詳述する。
【0050】
画素抜け判定部21は、円弧座標発生部6で発生した円弧上の画素の座標をもとに、法線ベクトル生成部5で生成された法線ベクトルによる描画の際に画素抜けが発生するか否かを判定し、円弧上の画素の座標とともに判定結果を法線ベクトル描画部22に伝える。
【0051】
法線ベクトル描画部22は、円弧座標発生部6で発生した円弧上の画素の座標をもとに、その画素を始点として、法線ベクトル生成部5で生成した法線ベクトルを描画する。また、画素抜け判定部21で画素抜けが発生すると判定されている場合には、画素抜けの除去も行なう。
【0052】
セグメント終了条件判定部23は、円弧座標発生部6によって発生された円弧上の画素がセグメントの終点に達したか否かを判定し、セグメントの終点に達していない場合には、円弧座標発生部6に対して次の円弧上の画素の座標の発生を指示する。
【0053】
次に、本発明の第3の実施の形態における動作の一例について、具体例を用いながら説明する。ここでは、セグメント始点・終点格納部3にセグメントの始点および終点の画素の座標が格納された後の処理について説明する。具体例として、図9に示すようにセグメントの始点の画素●と終点の画素◎の座標がセグメント始点・終点格納部3に格納されているものとする。
【0054】
図13は、本発明の第3の実施の形態における法線ベクトルの作成過程の説明図である。直線座標発生部4は、セグメント始点・終点格納部3に保持されているセグメントの始点および終点の画素の座標に基づいて、図13に示すようにセグメントの始点から終点の方向への直線上の画素の座標を発生する。図13では、発生された画素を○に×を施して示している。セグメントの始点から発生した画素の座標までの距離の計算は上述の第2の実施の形態における移動距離演算部13における処理と同様にして求めることができる。そして、計算された距離と線幅とを比較することによって、線幅分の直線上の画素が生成されたか否かを判定することができる。
【0055】
法線ベクトル生成部5は、直線座標発生部4において線幅分だけ発生された画素の座標をもとに、それらをセグメントの始点を中心として90°回転し、図13において●で示す画素列のように、セグメントの始点から終点方向に直交し長さが線幅となる法線ベクトルを生成する。
【0056】
図14は、本発明の第3の実施の形態における法線ベクトルに基づくセグメントの描画過程の説明図である。法線ベクトル生成部5において法線ベクトルが生成された後に、円弧座標発生部6は、例えば、Bresenhamの円弧発生アルゴリズム等を用いて、セグメントの始点から終点までの円弧上の画素の座標を順次発生する。そして法線ベクトル描画部22は、円弧座標発生部6で発生した座標を法線ベクトルの始点として、法線ベクトル生成部5で生成した法線ベクトルの描画を行なう。この法線ベクトルの描画を、円弧座標発生部6で発生した座標ごとに行なってゆく。
【0057】
ただし、図14に示すように、円弧上の画素が斜めに移動した場合は、図14に△で示す画素のように、画素抜けが生じる。そのため、画素抜け判定部21は、円弧座標発生部6で発生された円弧上の画素の座標に基づいて、画素が斜めに移動したことを検出して画素抜けと判定する。画素抜けとなる画素は法線ベクトル描画部22において埋められ、画素抜けが除去される。
【0058】
円弧座標発生部6による円弧上の画素の座標の発生は、セグメント終了条件判定部23がセグメントの終点を判定するまで行なわれ、セグメントの終点に達したらセグメント内の描画を終了する。これにより、図14に示すように1つのセグメントにおける描画が行なわれる。このとき、△で示す画素抜けの箇所も埋められている。描画されたセグメントレングスだけの図形は、円弧上の画素を始点として法線ベクトルを描画しているので、法線ベクトルの終点の画素が形成する図形の形状も円弧となり、画質を向上させることができる。また、線幅に応じた法線ベクトルを用いているため、線幅は均一となる。
【0059】
さらに、終了条件判定部8が最終的な終点を認識するまでセグメントごとに以上の処理を行ない、描画開始点から描画終了点までの線が描画される。このとき、各セグメントの境界部では、法線ベクトルを曲線の内側となるように発生させることによって、2つのセグメントの端部が隣接あるいは多少重複するように描画される。そのため、セグメント間で画素抜けなどは発生しない。
【0060】
上述の例では、法線ベクトルを曲線の内側に発生させるため、円や楕円の中心の回りに反時計方向に円弧や楕円弧の走査を行なうものとし、法線ベクトルを生成する際にもセグメントの始点を中心に反時計方向に90゜回転させている。もちろん、時計方向に円弧や楕円弧を走査しまた法線ベクトルを回転させる構成でもよい。また、円弧や楕円湖の走査方向と法線ベクトルの回転方向を異ならせ、法線ベクトルの終点を円弧座標発生部6で発生した円弧上の画素に合わせて描画するように構成することもできる。
【0061】
また、上述の第1の実施の形態で説明したように、本発明では特定のパターンに従って描画と抑止を切り替えながら処理することにより、破線や点線、鎖線などの描画が可能であるが、このような描画と抑止の切換処理は、例えば、円弧座標発生部6において円弧上の画素の座標を発生させる際に、描画部分の円弧上の画素の座標のみを描画部7に渡すように構成するほか、描画部7内の法線ベクトル描画部22において法線ベクトルを描画する際に特定のパターンに従って法線ベクトルを描画するか否かを判定しながら描画を行なうように構成することもできる。
【0062】
なお、上述の第2の実施の形態では円弧セグメント走査部2の内部構成の一例を、また、第3の実施の形態では描画部7の内部構成の一例をそれぞれ示したが、これらを組み合わせて構成してもよい。
【0063】
【発明の効果】
以上の説明から明らかなように、本発明によれば、円、円弧、楕円および楕円弧のどの位置においても、所望の線幅を一定に保ち、しかも内外周とも円弧上の画素が用いられるため、画質のよい図形を描画することができる。また、端点形状は描画方向に直交した直線で描画することができる。さらに、破線などを描画させる場合にも、簡単な制御のみによって描画することができるとともに、描画された破線などは各線素が揃い、線素間の間隔も揃った、高画質の破線などを得ることができるという効果がある。
【図面の簡単な説明】
【図1】本発明の図形描画装置の第1の実施の形態を示すブロック図である。
【図2】本発明の図形描画装置の第1の実施の形態における描画手順の一例の説明図である。
【図3】本発明の図形描画装置の第1の実施の形態における破線の描画の一例の説明図である。
【図4】本発明の図形描画装置の第2の実施の形態を示すブロック図である。
【図5】本発明の第2の実施の形態におけるセグメントレングス算出部の動作の一例を示すフローチャートである。
【図6】本発明の第2の実施の形態におけるセグメントレングス算出時の径に応じた半径計算の動作の一例の説明図である。
【図7】本発明の第2の実施の形態におけるセグメントレングス算出時の径に応じた半径の計算の動作の一例を示すフローチャートである。
【図8】本発明の第2の実施の形態における半径に基づく最大近似直線長の算出動作の一例を示すフローチャートである。
【図9】本発明の第2の実施の形態において円弧セグメント座標発生部で発生される画素の座標と円弧セグメントの一例の説明図である。
【図10】移動距離演算部の動作の一例の説明図である。
【図11】移動距離演算部の動作の一例を示すフローチャートである。
【図12】本発明の図形太線描画装置の第3の実施の形態を示すブロック図である。
【図13】本発明の第3の実施の形態における法線ベクトルの作成過程の説明図である。
【図14】本発明の第3の実施の形態における法線ベクトルに基づくセグメントの描画過程の説明図である。
【図15】従来の線分描画方法の描画手順の説明図である。
【図16】曲線を短い直線に近似して描画する従来の線分描画方法の描画手順の説明図である。
【符号の説明】
1…初期値認識部、2…円弧セグメント走査部、3…セグメント始点・終点格納部、4…直線座標発生部、5…法線ベクトル生成部、6…円弧座標発生部、7…描画部、8…終了条件判定部、9…フレームメモリ、11…セグメントレングス算出部、12…円弧セグメント座標発生部、13…移動距離演算部、14…セグメント走査判定部、21…画素抜け判定部、22…法線ベクトル描画部、23…セグメント終了条件判定部。
Claims (4)
- 円、円弧、楕円および楕円弧を描画する機能を有する図形描画装置において、入力された情報から描画する円、円弧、楕円および楕円弧の大きさと線の太さを認識する初期値認識手段と、該初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる近似直線の線分長と等しい円弧長となる座標を順次生成する円弧セグメント走査手段と、該円弧セグメント走査手段が生成した座標を円、円弧、楕円および楕円弧を近似する線分の始点と終点の座標として順次保持するセグメント始点・終点格納手段と、前記始点と終点間の円弧上の座標を生成する円弧座標発生手段と、前記始点と終点とを結ぶ直線上の座標を生成する直線座標発生手段と、該直線座標発生手段が生成した座標を基に前記始点と終点とを結ぶ直線に直交しかつ前記初期値認識手段で認識された線幅と等しい長さを有する画素列を生成する法線ベクトル生成手段と、該法線ベクトル生成手段で生成された画素列を前記円弧座標発生手段が生成した座標毎に発生させ描画を行なう描画手段を備えたことを特徴とする図形描画装置。
- 前記円弧セグメント走査手段は、前記初期値認識手段で認識した円、円弧、楕円および楕円弧の大きさと線の太さに基づいて円弧上の座標を生成する円弧セグメント座標発生手段と、該円弧セグメント座標発生手段が生成した座標の移動距離を演算する距離演算手段と、前記初期値認識手段が認識した円、円弧、楕円および楕円弧の大きさと線の太さを基に円、円弧、楕円および楕円弧を直線で近似して描画しうる線分長を算出するセグメントレングス算出手段と、該セグメントレングス算出手段が求めた線分長を前記移動距離演算手段が求めた移動距離が上回るか否かを判定するセグメント走査判定手段を備えていることを特徴とする請求項1に記載の図形描画装置。
- 前記描画手段は、前記円弧座標発生手段が求めた円弧座標に基づいて画素抜けの発生を判定する画素抜け判定手段と、円弧画素を始点とした法線ベクトルに沿って描画する法線ベクトル描画手段と、該法線ベクトル描画手段による描画が前記セグメントの終点まで終了したか否かを判定するセグメント終了条件判定手段を備えていることを特徴とする請求項1または2に記載の図形描画装置。
- 前記円弧座標発生手段は、前記始点と終点間の円弧上の座標を生成する際に、描画する線種に従って前記円弧上の少なくとも一部の座標のみを生成することを特徴とする請求項1ないし3のいずれか1項に記載の図形描画装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP07900196A JP3555316B2 (ja) | 1996-04-01 | 1996-04-01 | 図形描画装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP07900196A JP3555316B2 (ja) | 1996-04-01 | 1996-04-01 | 図形描画装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09270018A JPH09270018A (ja) | 1997-10-14 |
JP3555316B2 true JP3555316B2 (ja) | 2004-08-18 |
Family
ID=13677701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP07900196A Expired - Fee Related JP3555316B2 (ja) | 1996-04-01 | 1996-04-01 | 図形描画装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3555316B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4684744B2 (ja) * | 2005-05-27 | 2011-05-18 | 三菱電機株式会社 | 図形描画装置及びプログラム |
JP5127775B2 (ja) | 2009-05-15 | 2013-01-23 | 株式会社リコー | 情報処理装置、レーザ照射装置、制御システム、描画情報記憶装置 |
JP2010286359A (ja) * | 2009-06-11 | 2010-12-24 | Furuno Electric Co Ltd | 信号処理装置、この信号処理装置を備えるレーダ装置及びその信号処理装置の画素抜け検出方法 |
CN113029030B (zh) * | 2021-03-23 | 2023-03-14 | 深圳市梯易易智能科技有限公司 | 一种3d玻璃的曲面成像方法及装置 |
-
1996
- 1996-04-01 JP JP07900196A patent/JP3555316B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH09270018A (ja) | 1997-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6201550B1 (en) | Image forming apparatus and method of generating gradation pattern | |
JP3560749B2 (ja) | 画像出力装置及び画像出力のための信号処理方法 | |
JP3555316B2 (ja) | 図形描画装置 | |
JP3057935B2 (ja) | 文字出力装置 | |
US6753862B1 (en) | Outline smoothing method and system | |
JP3238580B2 (ja) | 太め細め文字生成装置 | |
KR100317549B1 (ko) | 문자채움처리를위해연쇄코드를사용하는비트맵문자변환방법 | |
KR20080009870A (ko) | 비트맵 이미지 회전 장치 및 그 방법 | |
US5754164A (en) | Outline font expanding method and outline font expanding device | |
JPH0263854A (ja) | 出力方法 | |
JP3498478B2 (ja) | 図形描画装置 | |
JP2663857B2 (ja) | 近似曲線生成装置 | |
JP3731221B2 (ja) | 太線描画装置および太線描画方法 | |
JPH11175740A (ja) | 太線描画方法および装置 | |
US6614940B2 (en) | System, method and computer program product for generic outline font compression | |
JP3034140B2 (ja) | 文字生成方法及びその装置 | |
JP2856136B2 (ja) | 印刷装置 | |
JP2787454B2 (ja) | 文字を有する絵柄フィルムの歪補正方法 | |
JPH07262385A (ja) | アウトラインデータ生成装置 | |
JP3615375B2 (ja) | 画像処理方法、装置および記憶媒体 | |
JP5479017B2 (ja) | 画像描画装置、画像描画方法、及びコンピュータプログラム | |
Rahman et al. | Finding significant points for parametric curve generation techniques | |
JPH09212665A (ja) | 線分描画装置 | |
JPH0668247A (ja) | ディジタル画像データ変倍方法および装置 | |
JP2965021B2 (ja) | 塗り込み処理方式、塗り込み処理方法および塗り込み処理プログラムを記録した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040413 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040420 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040503 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080521 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090521 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100521 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |