説明

曲線の直線近似方式

【目的】 本発明は、曲線の実数座標値から整数座標値を求めて直線近似する直線近似方式に関し、曲線の実数座標値から整数座標値に変換した後、元の曲線の実数座標値とこの整数座標値との誤差を求め、誤差が小さい整数座標値のみを取り出してこれらを結んで近似直線を求め、拡大時の品質低下を防止した曲線に近い高品質な近似直線を生成することを目的とする。
【構成】 曲線の実数座標値から整数座標値を算出する整数座標算出部2と、元の曲線の実数座標値とこの算出した整数座標値との誤差を求め、この誤差が所定閾値以下の整数座標値を選択する座標選択部3とを備え、選択した整数座標値を直線で結んで直線近似するように構成する。

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、曲線の実数座標値から整数座標値を求めて直線近似する直線近似方式に関するものである。
【0002】ディスプレイやプリンタなどの出力装置は、品質の高い出力が要求されている。特に、文字の出力方法に関しては、曲線アウトラインフォントといった輪郭を曲線式で表現する方法を使用し、品質の高い文字を出力している。
【0003】しかし、曲線アウトラインフォントは、曲線式の表現方法が複雑であって、処理速度が遅いなどの欠点もあり、輪郭を直線で表現した直線アウトラインフォントの需要も高い。このため、文字の輪郭をより曲線に近い直線で表現するための直線近似方式が望まれている。
【0004】
【従来の技術】従来の曲線を直線で近似する直線近似方式の構成を図6に示す。この図6の構成によれば、曲線の実数座標値を四捨五入などして整数座標値に変換し、この変換後の整数座標値から等間隔で抽出して近似直線の整数座標値を求めるようにしていた。以下図6の構成および動作を簡単に説明する。
【0005】図6は、従来技術の説明図を示す。図6において、曲線座標算出部21は、文字などの輪郭の曲線の実数座標値を算出し、曲線の実数座標メモリ24に格納するものである。
【0006】整数座標算出部22は、曲線の実数座標メモリ24から取り出した実数座標値を、整数座標値に変換(例えば四捨五入)し、変換した整数座標値を曲線の整数座標メモリ25に格納するものである。
【0007】等間隔抽出部23は、曲線の整数座標メモリ25から取り出した整数座標値から、等間隔のものを取り出し、直線座標メモリ26に格納するものである。次に、動作説明する。
【0008】(1) 曲線座標算出部21が、文字などの輪郭線の曲線の実数座標値を算出し、曲線の実数座標メモリ24に格納する(例えば図7の(a)の曲線座標のベクトルの実数座標値を算出し、曲線の実数座標メモリ24に格納する)。
【0009】(2) 整数座標算出部22が、曲線の実数座標メモリ24から取り出した実数座標値について、整数座標値に変換(例えば四捨五入)し、曲線の整数座標メモリ25に格納する。
【0010】(3) 等間隔抽出部23が、曲線の整数座標メモリ25から取り出した整数座標値について、等間隔に抽出して直線座標メモリ26に格納する。この格納した等間隔に抽出した整数座標値を直線で結び、模式的に表示すると、図7の(b)の線分を接続した直線となる。
【0011】
【発明が解決しようとする課題】上述した図6の構成によって、図7の(a)の曲線座標のベクトルを整数座標値に変換し、等間隔で抽出して線分で結ぶと図7の(b)のようになり、本来の曲線の形と異なり、不要なギザギザが発生するという問題があった。この不要なギザギザは、曲線の実数座標値を整数座標値に変換したときにその誤差によって発生したものであり、更に、等間隔に抽出していたため、曲線と、得られた線分との誤差が必ずしも小さい整数座標値を抽出するとは限られず、ギザギザとなったものである。このために、これらのギザギザをなくし、元の曲線に近い滑らかな直線の整数座標値を求めることが要望されている。
【0012】本発明は、これらの問題を解決するため、曲線の実数座標値から整数座標値に変換した後、元の曲線の実数座標値とこの整数座標値との誤差を求め、誤差が小さい整数座標値のみを取り出してこれらを結んで近似直線を求め、拡大時の品質低下を防止した曲線に近い高品質な近似直線を生成することを目的としている。
【0013】
【課題を解決するための手段】図1を参照して課題を解決するための手段を説明する。図1において、整数座標算出部2は、曲線の実数座標値から整数座標値を算出するものである。
【0014】座標選択部3は、元の曲線の実数座標値とこの算出した整数座標値との誤差を求め、所定閾値以下の整数座標値を選択するものである。
【0015】
【作用】本発明は、図1に示すように、整数座標算出部2が曲線の実数座標値から整数座標値を算出し、座標選択部3が元の曲線の実数座標値とこの算出した整数座標値との誤差を求め、所定閾値以下の整数座標値を選択し、これら選択した整数座標値を直線で結んで直線近似するようにしている。
【0016】また、整数座標算出部2が曲線の実数座標値から整数座標値を算出し、座標選択部3が曲線の実数座標値とこの算出した整数座標値との誤差を求め、所定閾値以下の整数座標値を選択し、これら選択した整数座標値を直線で結び、この直線と曲線の実数座標値との誤差を算出し、誤差の最大値が所定閾値以下のときに当該直線を求める近似直線とし、一方、誤差の最大値が所定閾値以上のときに曲線の実数座標値の間隔を細かくし、最初から処理を繰り返すようにしている。
【0017】また、整数座標算出部2が曲線の実数座標値から整数座標値を算出し、座標選択部3が曲線の実数座標値とこの算出した整数座標値との誤差を求め、所定閾値以下の整数座標値を選択し、これら選択した整数座標値を直線で結び、この直線と曲線の実数座標値との誤差の最大値を算出し、誤差の最大値が所定閾値以下のときに当該直線を求める近似直線とし、一方、誤差が所定閾値以上のときに前後の曲線の実数座標値の間隔を細かくし、この細かくした部分について最初から処理を繰り返すようにしている。
【0018】従って、曲線の実数座標値から整数座標値に変換した後、元の曲線の実数座標値とこの整数座標との誤差を求め、誤差が小さい整数座標値のみを取り出してこれらを結んで近似直線を求めたり、更に整数座標値を結ぶ直線と曲線の実数座標値との誤差の最大値を求めて所定閾値以上のときに実数座標値の全体あるいはその前後を細かくし、処理を繰り返すことにより、品質低下を防止した曲線に近い高品質な近似直線を生成することが可能となる。
【0019】
【実施例】次に、図1から図3を用いて本発明の実施例の構成および動作を順次詳細に説明する。
【0020】図1は、本発明の1実施例構成図を示す。図1において、曲線座標算出部1は、文字などの輪郭を曲線ベクトルで表現した表現式から当該曲線の実数座標値を算出するものである。例えば図3の(a)に示すように、X座標の実数座標値1.00、2.00・・・に対応づけてY座標の実数座標値3.00、3.03・・・というように算出するものである。この算出した実数座標値は、曲線の実数座標値メモリ4に格納する。
【0021】整数座標算出部2は、曲線の実数座標メモリ4より読み出した曲線の実数座標値から整数座標値を算出するものである。この整数座標値の算出は、曲線の実数座標値を例えば四捨五入して算出する。算出した整数座標値は、曲線の整数座標メモリ5に格納する。
【0022】座標選択部3は、曲線の実数座標メモリ4から読み出した実数座標値と、曲線の整数座標メモリ5から読み出した整数座標値との間の誤差を求め、この誤差が所定閾値以下の整数座標値のみを選択するものである。この選択した誤差が所定閾値以下の整数座標値は、直線座標メモリ6に格納する。また、誤差が所定閾値以下の整数座標値を直線で結び、この直線と曲線の実数座標値との誤差の最大値が所定閾値以上のときに、曲線座標算出部1による曲線の実数座標値を算出する全ての間隔を細かくしたり(図4を用いて後述する)、あるいは曲線座標算出部1による曲線の実数座標値について、誤差が最大値の実数座標値の近傍の間隔を細かくしたりし、誤差の最大値が所定閾値を越えないようにする。
【0023】曲線の実数座標メモリ4は、曲線の実数座標値を格納するメモリであって、例えば図3の(a)に示すように、X座標が1.00の間隔毎のY座標の実数座標値の列を格納するメモリである。
【0024】曲線の整数座標メモリ5は、曲線の実数座標メモリ4から読み出して整数にした整数座標値を格納するメモリである(図3の(b)参照)。直線座標メモリ6は、曲線の整数座標メモリ5から読み出した整数座標値のうち、曲線の実数座標メモリ4から読み出した実数座標値との誤差(誤差の絶対値)が所定閾値以下のものを格納するメモリである(図3の(d)参照)。
【0025】次に、図2のフローチャートに示す順序に従い、図1の構成の動作を詳細に説明する。図2において、S1は、曲線の実数座標値を算出する。これは、例えば図3の(e)の曲線座標のベクトルについて、所定の間隔、ここではX=1.00の間隔でY座標の実数座標値を図3の(a)に示すように算出する。
【0026】S2は、曲線の整数座標値を算出する。これは、例えば図3の(a)の曲線の実数座標値を、四捨五入して整数にした図3の(b)の整数座標値を算出する。S3は、実数座標値と整数座標値の差の絶対値(=誤差)を算出する。これは、例えば図3の(a)の曲線の実数座標値と、図3の(b)の整数座標値との差の絶対値を誤差として算出する。
【0027】S4は、誤差が閾値以下か判別する。YESの場合には、S5で整数座標値を出力(整数座標値を直線座標メモリ6に格納)し、S6に進む。NOの場合には、S6に進む。例えば図3の(c)の誤差(ここでは、Y座標の誤差)が所定閾値(ここでは0.15以下)か判別し、YESのものを図3の(d)に示すように出力する。
【0028】S6は、座標データが終了か判別する。これは、S1で算出した曲線の実数座標値について、S2からS5の処理を全て終了したか判別する。YESの場合には、終了する(END)。NOの場合には、次の座標データ(曲線の実数座標値)について、S2からS5を繰り返し実行する。
【0029】以上によって、例えば図3の(e)の曲線座標のベクトルについて、所定間隔毎に曲線の実数座標値を算出(S1、図3の(a)参照)し、この曲線の実数座標値を例えば四捨五入して整数座標値を算出(S2、図3の(b)参照)した後、曲線の実数座標値と整数座標値との差の絶対値である誤差を求め(S3、図3の(c)参照)、この誤差が所定閾値以下のものを選択して出力する(S4のYES、S5、図3の(d)参照)。これにより、曲線の実数座標値から誤差が所定閾値以下の整数座標値のみを選択して出力でき、図3の(f)に示すように、曲線に沿った滑らかな近似直線を求めることが可能となる。
【0030】図3は、本発明の具体例を示す。図3の(a)は、曲線の実数座標値の例を示す。これは、図3の(e)の曲線座標のベクトルについて、X座標の1.00の間隔毎にそのときのY座標の実数座標値を図示のように算出したものである。
【0031】図3の(b)は、曲線の整数座標値の例を示す。これは、図3の(a)の曲線の実数座標値のY座標値について四捨五入して整数座標値を算出したものである。
【0032】図3の(c)は、図3の(a)と(b)の誤差の例を示す。誤差は、下式(1)によって算出する。
誤差=|曲線の実数座標値−整数座標値|・・・・・・・・・・・・・(1)
ここで、曲線の実数座標値は例えば図3の(a)のY座標の3.03であり、整数座標値は図3の(b)のY座標の3.00であるから、これら両者を式(1)に代入し、誤差=|3.03−3.00|=0.03と算出する。
【0033】図3の(d)は、図3の(c)の誤差が0.15以下の整数座標値を選択したものである。ここでは、点線の矢印を用いて選択した整数座標値を示す。図3の(e)は、曲線座標のベクトルの例を示す。これは、文字の曲線部の輪郭線の曲線座標のベクトルの例である。この曲線座標のベクトルから、X座標について1.00の間隔毎にY座標の実数座標値を算出し、図3の(a)を求める。
【0034】図3の(f)は、図3の(d)の整数座標値を直線で結んだ近似直線を示す。この近似直線から判明するように、本発明は、曲線の実数座標値と誤差が閾値以下(ここでは0.15以下)の整数座標値のみを選択し、これらを結んで近似直線とすることにより、曲線の実数座標値から整数座標値に四捨五入したときの誤差の小さい整数座標値のみとなり、従来の図7の(b)の近似直線に発生するギザギザを無くし、曲線に沿った滑らかな近似直線を算出することが可能となる。
【0035】次に、図4は、本発明の他の動作説明フローチャート(その1)を示す。これは、図2のフローチャートに従い、S5で出力した整数座標値について、更に当該整数座標値を結んだ直線と、曲線の実数座標値との誤差の最大値が所定閾値を越えたときに、曲線の実数座標値の算出する間隔を細かくし、当該誤差の最大値が所定閾値以下となるようにしたものである。以下説明する。
【0036】図4において、S1からS6は、図2のS1からS6と同じであるので、説明を省略する。S7は、整数座標値を直線で結ぶ。
【0037】S8は、実数座標値と直線の差の絶対値(=誤差)を算出する。S9は、最大誤差が閾値以下か判別する。YESの場合には、求めた整数座標値を結んだ直線と曲線の実数座標値との誤差が閾値以下であると判明したので、一連の処理を終了する。一方、NOの場合には、求めた整数座標値を結んだ直線と曲線の実数座標値との誤差の最大値が閾値以上であると判明したので、S10で座標算出の間隔を細かくし、S1以降を実行する。これにより、曲線の実数座標値を求める間隔を細かくし、曲線を直線近似する際の間隔を短かくし、曲線に沿った近似直線を求めるようにする。
【0038】以上により、図2のフローチャートによって算出した整数座標値を結んだ直線と曲線の実数座標値との誤差の最大値が閾値以上のときに、曲線の実数座標値を求める間隔を動的に細かくし、曲線に沿った品質の高い近似直線を自動的に求めることが可能となる。
【0039】次に、図5は、本発明の他の動作説明フローチャート(その2)を示す。これは、図2のフローチャートに従い、S5で出力した整数座標値について、更に当該整数座標値を結んだ直線と、曲線の実数座標値との誤差の最大値が所定閾値を越えたときに、この所定閾値を越えた前後の曲線の実数座標値の算出する間隔を細かくし、当該誤差の最大値が所定閾値以下となるようにしたものである。以下説明する。
【0040】図5において、S1からS6は、図2のS1からS6と同じであるので、説明を省略する。S17は、整数座標値を直線で結ぶ。
【0041】S18は、実数座標値と直線の差の絶対値(=誤差)を算出する。S19は、最大誤差が閾値以下か判別する。YESの場合には、求めた整数座標値を結んだ直線と曲線の実数座標値との誤差の最大値が閾値以下であると判明したので、一連の処理を終了する。一方、NOの場合には、求めた整数座標値を結んだ直線と曲線の実数座標値との誤差の最大値が閾値以上であると判明したので、S20で最大誤差の前後の整数座標値の間で座標間隔を細かくし、曲線座標を算出しなおし、S2以降を実行する。これにより、直線と曲線の実数座標値の誤差が最大の部分について、曲線の実数座標値を求める間隔を細かくし、曲線を直線近似する際の間隔を短かくし、曲線に沿った近似直線を求めるようにする。
【0042】以上により、図2のフローチャートによって算出した整数座標値を結んだ直線と曲線の実数座標値との誤差の最大値が閾値以上のときに、誤差が大きい部分の曲線の実数座標値を求める間隔を動的に細かくし、曲線に沿った品質の高い近似直線を自動的に求めることが可能となる。
【0043】
【発明の効果】以上説明したように、本発明によれば、曲線の実数座標値から整数座標値に変換した後、元の曲線の実数座標値とこの整数座標との誤差を求め、誤差が小さい整数座標値のみを取り出してこれらを結んで近似直線を求たり、更に整数座標値を結ぶ直線と曲線の実数座標値との誤差の最大値を求めて所定閾値以上のときに実数座標値の全体あるいはその前後を細かくし、処理を繰り返す構成を採用しているため、曲線に近い高品質な近似直線を生成することができる。これにより、本来の曲線の実数座標値から誤差の少ない整数座標値を選択し、この選択した整数座標値を近似直線の座標とし、従来の直線近似で見られた拡大時の品質低下を防ぎ、拡大しても曲線に近い高品質の近似直線の整数座標値を求めることができる。
【図面の簡単な説明】
【図1】本発明の1実施例構成図である。
【図2】本発明の動作説明フローチャートである。
【図3】本発明の具体例である。
【図4】本発明の他の動作説明フローチャート(その1)である。
【図5】本発明の他の動作説明フローチャート(その2)である。
【図6】従来技術の説明図である。
【図7】従来技術の具体例である。
【符号の説明】
1:曲線座標算出部
2:整数座標算出部
3:座標選択部
4:曲線の実数座標メモリ
5:曲線の整数座標メモリ
6:直線座標メモリ

【特許請求の範囲】
【請求項1】曲線の実数座標値から整数座標値を求めて直線近似する直線近似方式において、曲線の実数座標値から整数座標値を算出する整数座標算出部(2)と、元の曲線の実数座標値とこの算出した整数座標値との誤差を求め、この誤差が所定閾値以下の整数座標値を選択する座標選択部(3)とを備え、選択した整数座標値を直線で結んで直線近似するように構成したことを特徴とする曲線の直線近似方式。
【請求項2】曲線の実数座標値から整数座標値を求めて直線近似する直線近似方式において、曲線の実数座標値から整数座標値を算出する整数座標算出部(2)と、元の曲線の実数座標値とこの算出した整数座標値との誤差を求め、この誤差が所定閾値以下の整数座標値を選択する座標選択部(3)とを備え、選択した整数座標値を直線で結び、この直線と曲線の実数座標値との誤差を算出し、誤差の最大値が所定閾値以下のときに当該直線を求める近似直線とし、一方、誤差の最大値が所定閾値以上のときに曲線の実数座標値の間隔を細かくし、最初から処理を繰り返すように構成したことを特徴とする曲線の直線近似方式。
【請求項3】曲線の実数座標値から整数座標値を求めて直線近似する直線近似方式において、曲線の実数座標値から整数座標値を算出する整数座標算出部(2)と、元の曲線の実数座標値とこの算出した整数座標値との誤差を求め、この誤差が所定閾値以下の整数座標値を選択する座標選択部(3)とを備え、選択した整数座標値を直線で結び、この直線と曲線の実数座標値との誤差を算出し、誤差の最大値が所定閾値以下のときに当該直線を求める近似直線とし、一方、誤差の最大値が所定閾値以上のときに当該誤差の最大値の前後の曲線の実数座標値の間隔を細かくし、この細かくした部分について最初から処理を繰り返すように構成したことを特徴とする曲線の直線近似方式。

【図1】
image rotate


【図2】
image rotate


【図6】
image rotate


【図3】
image rotate


【図4】
image rotate


【図5】
image rotate


【図7】
image rotate


【公開番号】特開平5−266184
【公開日】平成5年(1993)10月15日
【国際特許分類】
【出願番号】特願平4−64256
【出願日】平成4年(1992)3月19日
【出願人】(000005223)富士通株式会社 (25,993)