(57)【特許請求の範囲】
【請求項１】
描画文字を構成する複数のストロークから、連続するストロークをグループ化した１もしくは複数のストローク群を生成する手段と、
各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、
異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段と
を備えたことを特徴とするサーマルリライタブルメディア描画装置。
【請求項２】
サーマルリライタブルメディア描画装置の制御装置が、描画文字を構成する複数のストロークから、連続するストロークをグループ化した１もしくは複数のストローク群を生成する工程と、
前記制御装置が、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する工程と、
前記制御装置が、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する工程と
を備えたことを特徴とするサーマルリライタブルメディア描画制御方法。
【請求項３】
サーマルリライタブルメディア描画装置の制御装置を構成するコンピュータを、
描画文字を構成する複数のストロークから、連続するストロークをグループ化した１もしくは複数のストローク群を生成する手段、
各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段、
異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段
として機能させるサーマルリライタブルメディア描画制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、熱により発色する性質を持つサーマルリライタブルメディアにレーザ光で描画する技術に関する。
【背景技術】
【０００２】
リライタブル表示技術は、その利便性や環境負荷低減の点から注目度の高い技術分野として各種方式が提案されている。それらの中で、熱を利用したサーマルリライタブルメディア（ＴＲＭ：Thermal Rewritable Media）はいち早く実用化に至っている。
【０００３】
従来、サーマルリライタブルメディアにはサーマルヘッドによる加熱記録が用いられてきたが、レーザ光により加熱して記録するレーザ記録についても検討されている（例えば、特許文献１を参照。）。レーザ記録では従来のサーマルヘッド記録と異なり非接触であるために、メディアから離れた位置からレーザ光を照射して記録が可能であり、ベルトコンベア上を移動するコンテナのような移動体への記録も容易となる。これにより、サーマルリライタブルメディアの用途が広がる可能性がある。なお、レーザによる画像形成は従来から知られている（例えば、特許文献２を参照）。
【０００４】
ところで、サーマルリライタブルメディアは、ある温度の熱で発色が消去され、さらに高熱をかけると発色する性質を持っている。しかし、過大な熱負荷を加えるとサーマルリライタブルメディアが変質し、メディアの寿命が短くなったり、消去が完全に行えなくなったりするなどの劣化が現れやすくなる。
【０００５】
描画時において過大な熱負荷が加えられるのは、所定の線幅を持ったレーザ光が重複して照射される場合であり、具体的にはストローク（レーザ光を照射しながら移動する軌跡を示す線分）の「交叉」「折り返し」「接近」がある。
【０００６】
図１および図２はサーマルリライタブルメディアにレーザ光で描画された文字の例を示す図である。
【０００７】
図１は、例えば数字の「７」を変形（斜めの線を付加）したものであるが、ストロークの交叉により重複部分Ｐ１が発生している。重複部分Ｐ１が発生すると、直前に描いたストロークの余熱があるうちに、再度レーザ光があたることになり、結果として重複部分Ｐ１がより高熱になってしまうため、サーマルリライタブルメディアに悪影響が出てしまう。
【０００８】
また、図１では折り返しによる重複部分Ｐ２が存在する。レーザ光の照射方向を制御するミラーの慣性の影響により、折り返し部分では比較的長時間にわたってレーザ光が照射されるため、高熱になってしまい、サーマルリライタブルメディアに悪影響をもたらす。
【０００９】
図２は、例えば文字の「にんべん」を描画したものであり、レーザ光の中心がなぞるストロークに重複はないが、レーザ光の線幅により重複部分Ｐ３が発生している。
【００１０】
このような重複部分によるサーマルリライタブルメディアへの悪影響を防止するため、本発明者らはストロークの分割・消去・短縮等による重複の除去を試みている。例えば、２つのストロークに重複がある場合、除去量の小さい方のストロークを分割・消去・短縮等の対象とすることにより重複を除去する。除去量が同じ場合は描画順（先もしくは後）によって分割・消去・短縮等の対象となるストロークを決定する。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
線幅を含めたストロークの重複の除去を上述したようにして行う場合、複数のストロークが接近する場合にストロークが寸断され、描画品質の低下を招くという問題があった。
【００１２】
図３（ａ）は筆記体の小文字のエックスを描画する場合の重複除去前の状態を示しており、一筆書きとして連続するストロークＳＴ１〜ＳＴ７とストロークＳＴ８〜ＳＴ１４により描画するものとしている。
【００１３】
この場合、上述した手法で重複除去を行うと、図３（ｂ）に示すような状態になる。すなわち、ストロークＳＴ３、ＳＴ６、ＳＴ９、ＳＴ１２は一端が短縮されてストロークＳＴ３'、ＳＴ６'、ＳＴ９'、ＳＴ１２'となり、ストロークＳＴ４、ＳＴ１１は消去され、ストロークＳＴ１０、ＳＴ５は両端が短縮されてストロークＳＴ１０'、ＳＴ５'となる。
【００１４】
このようなストロークの寸断による描画品質の低下は、一筆書きとして連続するストロークが複数に分かれる場合だけではなく、図４に示すような一筆書きで描画される文字「α」における交叉部分や、文字「す」のループ部分等でも生じる。
【００１５】
本発明は上記の問題点に鑑み提案されたものであり、その目的とするところは、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することのできるサーマルリライタブルメディア描画装置を提供することにある。
【課題を解決するための手段】
【００１６】
上記の課題を解決するため、本発明にあっては、請求項１に記載されるように、描画文字を構成する複数のストロークから、連続するストロークをグループ化した１もしくは複数のストローク群を生成する手段と、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段とを備えるサーマルリライタブルメディア描画装置を要旨としている。
【００１７】
また、請求項２に記載されるように、サーマルリライタブルメディア描画装置の制御装置が、描画文字を構成する複数のストロークから、連続するストロークをグループ化した１もしくは複数のストローク群を生成する工程と、前記制御装置が、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する工程と、前記制御装置が、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する工程とを備えるサーマルリライタブルメディア描画制御方法として構成することができる。
【００１８】
また、請求項３に記載されるように、サーマルリライタブルメディア描画装置の制御装置を構成するコンピュータを、描画文字を構成する複数のストロークから、連続するストロークをグループ化した１もしくは複数のストローク群を生成する手段、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段として機能させるサーマルリライタブルメディア描画制御プログラムとして構成することができる。
【発明の効果】
【００１９】
本発明のサーマルリライタブルメディア描画装置にあっては、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することができる。
【図面の簡単な説明】
【００２０】
【図１】サーマルリライタブルメディアにレーザ光で描画された文字の例を示す図（その１）である。
【図２】サーマルリライタブルメディアにレーザ光で描画された文字の例を示す図（その２）である。
【図３】ストロークの寸断が生じる場合の例を示す図（その１）である。
【図４】ストロークの寸断が生じる場合の例を示す図（その２）である。
【図５】本発明の一実施形態にかかるサーマルリライタブルメディア描画装置の構成例を示す図である。
【図６】全体制御装置の構成例を示す図である。
【図７】ユーザの指定するパラメータのデータ構造例を示す図である。
【図８】描画文字管理データの構造例を示す図である。
【図９】フォントデータの構造例を示す図である。
【図１０】ストロークフォントのデータ構造例を示す図である。
【図１１】アウトラインフォントのデータ構造例を示す図である。
【図１２】ストローク群管理データの構造例を示す図である。
【図１３】交点列データの構造例を示す図である。
【図１４】フラグ等データの構造例を示す図である。
【図１５】実施形態の処理の概要を示すフローチャートである。
【図１６】処理の例を示す図である。
【図１７】実施形態の処理例を示すフローチャートである。
【図１８】ストロークの重複除去の処理例を示すフローチャートである。
【図１９】ストロークのグループ化の処理例を示すフローチャートである。
【図２０】始点・終点が一致する２つのストロークと判断する角度の例を示す図である。
【図２１】グループ化するための角度条件による描画結果の例を示す図である。
【図２２】太くする分だけ並行ストロークを生成の処理例を示すフローチャートである。
【図２３】平行ストロークの生成途中の状態の例を示す図である。
【図２４】グループ内の重複除去の処理例を示すフローチャートである。
【図２５】ストローク間の最小距離を導出の処理例を示すフローチャートである。
【図２６】ストロークが平行な場合の例を示す図である。
【図２７】ストロークが平行でなく交点がストローク内に存在しない場合の例を示す図である。
【図２８】平行の場合のストローク分割等の処理例を示すフローチャートである。
【図２９】平行なストロークの短縮および削除の例を示す図である。
【図３０】非平行の場合のストローク分割等の処理例を示すフローチャートである。
【図３１】２つのストロークが交わる場合の例を示す図である。
【図３２】ストロークが平行でない場合の処理の例を示す図である。
【図３３】消滅可能性のあるストロークにマークを付与の処理例を示すフローチャートである。
【図３４】ストロークの交叉角度による交点間距離の補正の例を示す図である。
【図３５】ストローク群同士の重複除去の処理例を示すフローチャート（その１）である。
【図３６】ストローク群同士の重複除去の処理例を示すフローチャート（その２）である。
【図３７】ストロークがわずかに他のストロークに接触する例を示す図である。
【図３８】フラグ群からどちらのストローク群を短縮・分割するかを選択の処理例を示すフローチャートである。
【図３９】太文字の場合の描画例を示す図である。
【図４０】従来の問題点が改善された例を示す図である。
【発明を実施するための形態】
【００２１】
以下、本発明の好適な実施形態につき説明する。
【００２２】
＜構成＞
図５は本発明の一実施形態にかかるサーマルリライタブルメディア描画装置１の構成例を示す図である。
【００２３】
図５において、サーマルリライタブルメディア描画装置１は、装置全体を制御する全体制御装置１１と、レーザ光を照射するレーザ照射部１２とを有する。また、レーザ照射部１２は、レーザ光を発生するレーザ発振器１３と、レーザ光のスポット径を調整（スポット径を大きくする）するスポット径調整レンズ１４と、レーザ光の照射方向を変える方向制御ミラー１５と、方向制御ミラー１５を駆動する方向制御用モータ１６と、方向制御ミラー１５により方向の変えられたレーザ光をサーマルリライタブルメディア２上に収束させる焦点距離調整レンズ１７とを有している。
【００２４】
レーザ発振器１３は、半導体レーザ（ＬＤ（Laser  Diode））が一般に用いられるが、気体レーザ発振器、固体レーザ発振器、液体レーザ発振器等であってもよい。方向制御用モータ１６は、方向制御ミラー１５の反射面の向きを２軸に制御する例えばサーボモータである。方向制御用モータ１６と方向制御ミラー１５とによりガルバノミラーを構成する。
【００２５】
サーマルリライタブルメディア２は、例えばロイコ染料と顕色剤が分離した状態で膜を形成し、そこに所定温度Ｔａの熱を加え急冷することでロイコ染料と顕色在が結合して発色し、所定温度Ｔａよりも低い所定温度Ｔｂを加えるとロイコ染料と顕色剤が分離した状態に戻ることで消色するメディア、例えば書き換え可能な感熱タイプの紙である。本実施形態では、このような書き換え可能なサーマルリライタブルメディア２の劣化抑制を可能とするが、サーマルペーパのように書き換えが可能でないメディアに対しても適用することができる。
【００２６】
図６は全体制御装置１１の構成例を示す図である。ここでは、主にソフトウェアによって全体制御装置１１を実装する場合のハードウェア構成を示しており、コンピュータを実体としている。コンピュータを実体とせず全体制御装置１１を実現する場合、ＡＳＩＣ（Application Specific Integrated Circuit）等の特定機能向けに製造されたＩＣを利用する。
【００２７】
全体制御装置１１は、ＣＰＵ１１１、メモリ１１２、記憶装置１１３、入力装置１１４、ディスプレイ１１５、ＣＤ／ＤＶＤドライブ１１６およびネットワーク装置１１７を有している。ハードディスクドライブ等の記憶装置１１３には、ストロークフォントおよびアウトラインフォントの一連の文字のフォントデータを記憶するフォントデータＤＢ１１３１と、フォントデータから重複を排除した描画命令を生成しレーザ照射部１２（図５）を制御する文字描画プログラム１１３２が記憶されている。
【００２８】
ＣＰＵ１１１は、記憶装置１１３から文字描画プログラム１１３２を読み出して実行し、後述する手順で、サーマルリライタブルメディア２に文字を描画する。メモリ１１２は、ＤＲＡＭなどの揮発性メモリで、ＣＰＵ１１１が文字描画プログラム１１３２を実行する際の作業エリアとなる。入力装置１１４は、マウスやキーボードなどレーザ照射部１２を制御する指示をユーザが入力するための装置である。ディスプレイ１１５は、例えば文字描画プログラム１１３２が指示する画面情報に基づき所定の解像度や色数で、ＧＵＩ（Graphical User Interface）画面を表示するユーザインタフェースとなる。例えば、サーマルリライタブルメディア２に描画する文字の入力欄等が表示される。
【００２９】
ＣＤ／ＤＶＤドライブ１１６は、ＣＤ／ＤＶＤ３１を脱着可能に構成され、ＣＤ／ＤＶＤ３１からデータを読み出し、また、データを書き込む。フォントデータＤＢ１１３１および文字描画プログラム１１３２は、ＣＤ／ＤＶＤ３１に記憶された状態で配布され、ＣＤ／ＤＶＤ３１から読み出されて記憶装置１１３にインストールされる。ＣＤ／ＤＶＤ３１は、この他、ブルーレイディスク、ＳＤカード、メモリースティック（登録商標）、マルチメディアカード、ｘＤカード等、不揮発性のメモリで代用することができる。
【００３０】
ネットワーク装置１１７は、ＬＡＮやインターネットなどのネットワークに接続するためのインターフェイス（例えばイーサネット（登録商標）カード）であり、ＯＳＩ基本参照モデルの物理層、データリンク層に規定されたプロトコルに従う処理を実行して、レーザ照射部１２に文字コードに応じた描画命令を送信することを可能とする。フォントデータＤＢ１１３１および文字描画プログラム１１３２は、ネットワークを介して接続した所定のサーバからダウンロードすることができる。なお、ネットワーク経由でなく、ＵＳＢ（Universal Serial Bus）、ＩＥＥＥ１３９４、ワイヤレスＵＳＢ、Ｂｌｕｅｔｏｏｔｈ等で直接、全体制御装置１１とレーザ照射部１２を接続してもよい。
【００３１】
サーマルリライタブルメディア２に描画される描画対象の文字は、例えばリスト状に記憶装置１１３に記憶されているか、入力装置１１４から入力される。文字は、ＵＮＩＣＯＤＥやＪＩＳコードなどの文字コードで特定され、全体制御装置１１は文字コードに対応する文字のフォントデータをフォントデータＤＢ１１３１から読み出し、それを描画命令に変換することでレーザ照射部１２を制御する。
【００３２】
図７〜図１４はサーマルリライタブルメディア描画装置１の全体制御装置１１における処理に際して用いられるデータ例を示したものである。
【００３３】
図７はユーザの指定するパラメータのデータ構造例を示す図であり、「文字種」「文字列 （文字コード列）」「太文字（平行ストロークの本数、重なり幅）」「文字サイズ（幅、高さ）」「文字間隔」「行間隔」「行方向」「描画範囲」「描画可能範囲」「回転」等の項目を有している。
【００３４】
図８は描画文字管理データの構造例を示す図であり、描画対象文字ごとに、「通番（描画順）」「文字コード」「描画位置（Ｘ座標、Ｙ座標）」「描画倍率」等の項目を有している。
【００３５】
図９はフォントデータの構造例を示す図であり、文字の線芯の軌跡で表現したストロークフォントデータと、文字の輪郭の軌跡で表現したアウトラインフォントデータとを含んでいる。ストロークフォントデータは、文字ごとに「文字コード」に「ストロークフォントデータ」が対応付けられている。アウトラインフォントデータは、「文字コード」に「アウトラインフォントデータ」が対応付けられている。
【００３６】
図１０（ａ）はストロークフォントのデータ構造例を示す図であり、文字コードを表わす「ｃ」で始まる行に続き、移動を表わす「ｍ」で始まる行と、直線描画を表わす「ｄ」で始まる行と、この例では出現しないが、曲線描画を表わす「ｂ」で始まる行とが列記されている。図１０（ａ）のストロークフォントデータに対応する文字を図９（ｂ）に示している。
【００３７】
図１１（ａ）はアウトラインフォントのデータ構造例を示す図であり、文字コードを表わす「ｃ」で始まる行に続き、移動を表わす「ｍ」で始まる行と、直線描画を表わす「ｄ」で始まる行と、曲線描画を表わす「ｂ」で始まる行とが列記されている。図１１（ａ）のアウトラインフォントデータに対応する文字を図１１（ｂ）に示している。
【００３８】
図１２（ａ）はストローク群管理データの構造例を示す図であり、ストローク群の通し番号を表わす「ＧＮ」で始まる行と、属するストロークの総数を表わす「ＮＭ」で始まる行に続き、このストローク群に属するストロークのデータが列記されている。各ストロークのデータは、ストローク番号を表わす「ＳＮ」で始まる行と、始点のＸ座標を表わす「ＸＳ」で始まる行と、始点のＹ座標を表わす「ＹＳ」で始まる行と、終点のＸ座標を表わす「ＸＥ」で始まる行と、終点のＹ座標を表わす「ＹＥ」で始まる行とを含んでいる。図１２（ａ）に対応するストローク群の例を図１２（ｂ）に示している。
【００３９】
図１３は各ストローク群に対応付けられた交点列データの構造例を示す図であり、各交点につき、「第１のストローク群番号」「第１のストローク群のストローク番号」「第２のストローク群番号」「第２のストローク群のストローク番号」「交点座標」「交叉角度」等の項目を有している。
【００４０】
図１４は各ストローク群に対応付けられたフラグ等データの構造例を示す図であり、「消滅可能性マーク」「フラグｔｅｒｍ」「フラグｖａｎｉｓｈ」「フラグｆｌａｇ」「フラグｏｔｈｅｒ」「合計削除面積」等の項目を有している。
【００４１】
＜動作＞
図１５は上記の実施形態の処理の概要を示すフローチャートである。また、図１６（ａ）は通常文字描画の例を示しており、図１６（ｂ）は太文字描画の例を示している。
【００４２】
図１５において、処理を開始すると、各描画対象文字について、１もしくは複数のストロークから構成されるフォント線芯情報を取得する（ステップＳ１１）。図１６（ａ）の（i）はその状態を示している。太文字描画の場合も同様である。
【００４３】
次いで、図１５に戻り、ストロークが連続するストローク群を抽出する（ステップＳ１２）。図１６（ａ）の（ii）はその状態を示している。太文字描画の場合も同様である。
【００４４】
次いで、図１５に戻り、太文字描画の場合は、線幅を増やすための平行ストロークを生成する（ステップＳ１３）。図１６（ｂ）の（iii）はその状態を示している。
【００４５】
次いで、図１５に戻り、ストローク群内の重複除去を行う（ステップＳ１４）。図１６（ａ）（ｂ）の（iv）はその状態を示している。この例では、文字「す」の上から下に書き下ろす途中のループ部分の根元の重複部分が除去される。
【００４６】
次いで、図１５に戻り、ストローク群間の重複除去を行う（ステップＳ１５）。図１６（ａ）（ｂ）の（v）はその状態を示している。この例では、文字「す」の上部の左から右に直線的に伸びるストロークと上から下に書き下ろすストロークとの交叉における重複部分が除去される。
【００４７】
次いで、図１５に戻り、重複の除去された描画データを出力し（ステップＳ１６）、描画が行われて処理を終了する。
【００４８】
図１７は上記の実施形態の処理例を示すフローチャートである。
【００４９】
図１７において、処理を開始すると、ユーザが与えたパラメータに形式的な不備がないか否かチェックを行う（ステップＳ１０１）。
【００５０】
次いで、ユーザが与えたパラメータから文字コード、文字間隔、行間隔等を取得し、１文字ずつ描画位置を導出し、描画文字管理データに設定する（ステップＳ１０２）。
【００５１】
次いで、描画倍率を文字ごとに導出し、描画文字管理データに設定する（ステップＳ１０３）。フォントは例えば２５６×２５６画素のメッシュ上の座標値として定義されている。これをユーザが与えた文字サイズ（例えば、横３センチ、縦２．５センチ）に拡大するための倍率を導出する。ストロークは太さ（線幅）を持つので、ユーザが与えた文字サイズよりも、上下左右を線幅の半分だけ文字サイズを小さく考えて、描画倍率を導出する。太文字を描く場合は、ユーザにより指定された平行ストロークの本数に従い、ストロークを例えば３本〜９本、平行に描くため、線幅が３〜９倍になったとみなし、描画倍率をその分小さく設定する。
【００５２】
次いで、先頭から１文字ずつ、文字がユーザ指定の描画範囲や、描画可能範囲（≒媒体の広さ）を超えていないか判断する（ステップＳ１０４）。回転が指定されている場合があるので、回転した場合にはみ出ないことを確認する。
【００５３】
次いで、はみ出る文字は描画対象文字から抹消（描画文字管理データを削除）する（ステップＳ１０５）。
【００５４】
次いで、全ての文字について処理したか否か判断し（ステップＳ１０６）、処理していない場合（ステップＳ１０６のＮｏ）は、はみだしの判断（ステップＳ１０４）に戻る。
【００５５】
全ての文字について処理した場合（ステップＳ１０６のＹｅｓ）は、文字の描画順を、高速になるように並べ替える（ステップＳ１０７）。文字列は例えば横書きで描画され、左から右、上から下の順に描画するように初期定義されるが、ある文字行の右端から１段下の文字行の左端までの距離が遠いため、描画時間が多くかかる。そのため、１行おきに左から右、右から左と描画の向きを変える処理を行う。
【００５６】
次いで、設定された描画順に従い、１文字ずつ、フォントデータからストローク情報を取得する（ステップＳ１０８）。すなわち、フォントデータから、先に定義された描画倍率に従ってストロークの座標を取得する。通常の文字を描画するならストロークフォントからストローク情報を取得し、袋文字を描画するならアウトラインフォントからストローク情報を取得する。
【００５７】
次いで、ストロークの重複除去を行う（ステップＳ１０９）。ストロークが重複すると過熱するため、これを防ぐために、ストロークを過不足なく分割したり、短縮したり、削除したりする処理である。ストロークは線分情報であるが、実際には線幅を持つため、ストローク同士が交叉する場合だけでなく、ストローク同士が接近するだけでも重複除去を行う必要がある。処理内容の詳細は後述する。
【００５８】
次いで、全ての文字について処理したか否か判断し（ステップＳ１１０）、処理していない場合（ステップＳ１１０のＮｏ）は、ストローク情報の取得（ステップＳ１０８）に戻る。
【００５９】
全ての文字について処理した場合（ステップＳ１１０のＹｅｓ）は、白抜き文字への変換処理を行う（ステップＳ１１１）。白抜き文字を描画する場合に限り行われる処理である。
【００６０】
次いで、ストロークをパラメータにしたがって回転する（ステップＳ１１２）。ストロークは線分の端点座標で定義されるので、これを単純に回転させればよい。
【００６１】
次いで、内部で扱っているストロークのデータ形式を、描画コントローラ（下位コントローラ）で解釈可能な、描画データの形式に変換し（ステップＳ１１３）、処理を終了する。
【００６２】
図１８はストロークの重複除去（図１７のステップＳ１０９）の処理例を示すフローチャートである。
【００６３】
図１８において、処理を開始すると、処理対象の文字１つに対し、これが塗りつぶし文字であるかどうかを判定する（ステップＳ２０１、Ｓ２０２）。塗りつぶし文字とは、「●」、「★」など、通常のストロークでは表現しづらい文字を、塗りつぶしを行う平行ストロークによって定義した文字である。きわめて細かいピッチの線分データがフォントデータに格納されているため、描画対象の線幅にあわせて間引く必要がある。判断は、ストロークがほぼすべて平行であるかどうかで行う。
【００６４】
塗りつぶし文字の場合（ステップＳ２０２のＹｅｓ）は、いったんビットマップ化し、そのビットマップを内部でスキャンすることで改めてストロークを定義する（ステップＳ２０３）。そして、処理を終了する。
【００６５】
塗りつぶし文字でない場合（ステップＳ２０２のＮｏ）は、ストロークの統合を行う（ステップＳ２０４）。フォントデータに格納されているストロークは、同一直線上にありながら、複数の線分が重複して定義されていることがある。これを１本の直線にまとめて処理の効率化を図る。
【００６６】
次いで、ストロークすべてについて、端点が同一であるストローク同士は隣り合って格納されるよう、格納順を並べ替える（ステップＳ２０５）。
【００６７】
次いで、反転文字描画であるか否か判断する（ステップＳ２０６）。
【００６８】
反転文字描画の場合（ステップＳ２０６のＹｅｓ）は、処理をここで終了する。まだ重複が残っているが、格納された文字データ自体は描画対象ではないので、以降の重複除去処理は不要になる。
【００６９】
反転文字描画でない場合（ステップＳ２０６のＮｏ）は、ストロークのグループ（群）化を行う（ステップＳ２０７）。端点が同一となる複数のストロークは連続しているとみなしてグループ化する処理である。描画の際、連続するストロークはレーザをＯＦＦにせず続けて描画する。このグループは、連続した一群のストロークの単位である。処理内容の詳細は後述する。
【００７０】
次いで、ストローク群の一つ一つについて、グループ内で重複があるかどうかを判断し、あればストロークの分割、短縮、削除を行う（ステップＳ２０８）。処理内容の詳細は後述する。
【００７１】
次いで、消滅可能性のあるストローク群にマークを付ける（ステップＳ２０９）。分割・短縮・削除を行った場合に、ストローク全体が消えてしまったり、２つのストロークにはさまれた部分が消えてしまったりすると、情報量が欠落して視認性が大きく低下すると考えられるので、こうしたストロークは分割や短縮が行われにくいよう、判別してマークをつけておく処理である。処理内容の詳細は後述する。
【００７２】
次いで、ストローク群を２つ選び、それらが重複している場合は重複除去を行う（ステップＳ２１０）。処理内容の詳細は後述する。
【００７３】
次いで、ストローク群の端点を延長する（ステップＳ２１１）。端点部は熱が逃げやすいため、実際に描画すると狙いより線が短くなってしまう。そこで、ストローク群の端点部を少し延長して長めに描画することで、結果として狙い通りの長さの線を描くことができる。
【００７４】
次いで、文字内ストローク順を並べ替える（ステップＳ２１２）。効率の良い順番で描くことで、無駄なジャンプ（空走）を減らして、実際にレーザマーカで描く際の描画時間を短縮することができる。
【００７５】
次いで、交点ジャンプ設定を行う（ステップＳ２１３）。交点ジャンプとは、マーク速度と同じ速度でジャンプを行うことを指す。通常、ジャンプはマーク（描画）よりも高速で行われるため、その前後にはミラーを安定させるためにある程度の待ち時間（ディレイ）を置かなければならない。マークとマークにはさまれたジャンプの速度をマークと同じにすることで、待ち時間の挿入が不要になるため、描画にかかる時間を節約できる。その後、処理を終了する。
【００７６】
図１９はストロークのグループ化（図１８のステップＳ２０７）の処理例を示すフローチャートである。
【００７７】
図１９において、処理を開始すると、処理対象が太文字かどうかを判断する（ステップＳ３０１）。これはユーザにより与えられたパラメータから判断する。
【００７８】
太文字の場合（ステップＳ３０１のＹｅｓ）は、以下の太文字についての処理（ステップＳ３０２〜Ｓ３０７）を行う。太文字でない場合（ステップＳ３０１のＮｏ）は、太文字についての処理（ステップＳ３０２〜Ｓ３０７）を行わない。
【００７９】
太文字についての処理では、まず、２つのストロークを選び（ステップＳ３０２）、始点・終点が一致するかどうかを判断する（ステップＳ３０３）。
【００８０】
一致する場合（ステップＳ３０３のＹｅｓ）、更に、一致点を中心とする角度が８５度を越えるか否か判断する（ステップＳ３０４）。図２０は始点・終点が一致する２つのストロークと判断する角度の例を示している。角度「８５度」の意味については後述する。
【００８１】
図１９に戻り、一致点を中心とする角度が８５度を超える場合（ステップＳ３０４のＮｏ）、両者を同一グループとしてまとめる（ステップＳ３０５）。
【００８２】
始点・終点が一致しない場合（ステップＳ３０３のＮｏ）もしくは始点・終点が一致する２つのストロークの角度が８５度を越えない場合（ステップＳ３０４のＹｅｓ）は、グループ化（ステップＳ３０５）を行わない。
【００８３】
次いで、すべての組み合わせを吟味したか否か判断し（ステップＳ３０６）、吟味していない場合（ステップＳ３０６のＮｏ）は２つのストロークの選択（ステップＳ３０２）に戻る。
【００８４】
すべての組み合わせについて吟味した場合（ステップＳ３０６のＹｅｓ）は、太くする分だけ、平行ストロークを発生させる（ステップＳ３０７）。例えば３本線で太線を表現する場合には、ストロークの脇に１本ずつ、計２本の平行なストロークを発生させる。処理内容の詳細は後述する。
【００８５】
次いで、太文字の場合も、そうでない場合も、２つのストロークを選び（ステップＳ３０８）、始点・終点が一致するかどうかを判断する（ステップＳ３０９）。
【００８６】
一致する場合（ステップＳ３０９のＹｅｓ）、更に、一致点を中心とする角度が１３５度を越えるか否か判断する（ステップＳ３１０）。角度「１３５度」の意味については後述する。
【００８７】
一致点を中心とする角度が１３５度を超える場合（ステップＳ３１０のＮｏ）、両者を同一グループとしてまとめる（ステップＳ３１１）。
【００８８】
始点・終点が一致しない場合（ステップＳ３０９のＮｏ）もしくは始点・終点が一致する２つのストロークの角度が１３５度を越えない場合（ステップＳ３１０のＹｅｓ）は、グループ化（ステップＳ３１１）を行わない。
【００８９】
次いで、すべての組み合わせを吟味したか否か判断し（ステップＳ３１２）、吟味していない場合（ステップＳ３１２のＮｏ）は２つのストロークの選択（ステップＳ３０８）に戻る。
【００９０】
すべての組み合わせについて吟味した場合（ステップＳ３１２のＹｅｓ）は、処理を終了する。
【００９１】
以上の処理で角度が重要になるのは、急角度での折れ曲がりを別のストローク群にするためである（例えば、文字「ヌ」の右上部分）。ミラーの慣性により、折れ曲がり部は向きを変えるのに時間がかかり、長い時間レーザが照射され、過熱してしまう。よって、この部分は別のストローク群にしていったんレーザをＯＦＦにする必要がある。
【００９２】
太文字の場合は、新たに生成した平行ストロークをグループ化する必要があることと、グループ化するための角度条件が異なるので、２度のグループ化が必要である。
【００９３】
角度条件を仮に設けないとすると、急角度の折れ曲がり部分は図２１（ａ）のような結果になってしまう。もし、角度条件を後段の処理の１３５度と同じにすると、図２１（ｂ）のような結果となり、文字「５」の左上の見栄えが良くない。そこで、適正な角度（８５度）で処理を行うことで、図２１（ｃ）のような結果が得られる。
【００９４】
図２２は太くする分だけ並行ストロークを生成（図１９のステップＳ３０７）の処理例を示すフローチャートである。
【００９５】
図２２において、処理を開始すると、ストローク群を新たに生成するため、格納に必要なストローク群配列（ストローク群管理データ）を新たに確保する（ステップＳ４０１）。
【００９６】
次いで、元ストローク群番号の修正を行う（ステップＳ４０２）。ストローク群には番号を付けて識別に利用しているが、現時点では「０」から始まる１刻みの値が入っている。これを、ユーザによって指定された平行ストロークの本数にあわせて変更する。例えば、太線を３本のストロークを並べて表現する場合は、現在あるストローク群番号を「０，１，２，３，・・，ｎ」から「１，４，７，１０，・・，３ｎ＋１」に変更する。５本の場合は、「２，７，１２，１７，・・，５ｎ＋２」と変更する。つまり、平行ストロークがｉ本ある場合は、同一ストローク群から派生した平行ストローク群が連続して格納されるようにし、その連続の中心に現在あるストロークが位置するようにする。これは、後段で、どれが中心ストロークかを判断できるようにするための処理である。
【００９７】
次いで、１つのストローク群を取得し（ステップＳ４０３）、そのストローク群の１つのストロークを取得し（ステップＳ４０４）、このストロークの単位法線ベクトルを求める（ステップＳ４０５）。単位法線ベクトルはストロークの始点・終点を通る直線の式から求められる。
【００９８】
次いで、単位法線ベクトルの方向に線幅分だけシフトした位置に、注目しているストロークと同じ長さの新たなストロークを生成する（ステップＳ４０６）。正確には、ユーザが指定する重なり幅（Fill Overlap）分だけ、シフト位置は小さくする。
【００９９】
次いで、注目しているストローク群に含まれる全てのストロークを吟味したか否か判断し（ステップＳ４０７）、吟味していない場合（ステップＳ４０７のＮｏ）はストロークの取得（ステップＳ４０４）に戻る。
【０１００】
全てのストロークを吟味した場合（ステップＳ４０７のＹｅｓ）は、ユーザにより指定された平行ストロークの本数に基づいて他に発生させる平行ストロークはないか判断し（ステップＳ４０８）、ある場合（ステップＳ４０８のＮｏ）はストロークの取得（ステップＳ４０４）に戻る。
【０１０１】
他に発生させる平行ストロークはない場合（ステップＳ４０８のＹｅｓ）は、次の処理に移行する。
【０１０２】
この時点では、図２３（ａ）に示すように、平行ストロークは互いに正しくつながっておらず、折れ曲がりの内側では重複、外側ではストロークの断絶が発生している。そこで、その修正の処理を続行する。
【０１０３】
図２２に戻り、同一のストローク群に属する平行ストローク（例えば、図２３（ａ）の一番上のストローク）で隣接しているものを選び（ステップＳ４０９）、その交点を求める（ステップＳ４１０）。
【０１０４】
次いで、求めた交点までストロークを短縮あるいは延長する（ステップＳ４１１）。
【０１０５】
次いで、全ての組み合わせを吟味したか否か判断し（ステップＳ４１２）、してない場合（ステップＳ４１２のＮｏ）は隣接ストロークの選択（ステップＳ４０９）に戻る。
【０１０６】
全ての組み合わせを吟味した場合（ステップＳ４１２のＹｅｓ）は、全てのストローク群を吟味したか否か判断し（ステップＳ４１３）、していない場合（ステップＳ４１３のＮｏ）はストローク群の取得（ステップＳ４０３）に戻る。
【０１０７】
全てのストローク群を吟味した場合（ステップＳ４１３のＹｅｓ）は、処理を終了する。
【０１０８】
図２４はグループ内の重複除去（図１８のステップＳ２０８）の処理例を示すフローチャートである。
【０１０９】
図２４において、処理を開始すると、１つのストローク群を取得する（ステップＳ５０１）。
【０１１０】
次いで、そのストローク群の内部の２本のストロークを取得する（ステップＳ５０２）。
【０１１１】
次いで、その２本のストローク間の最小距離を求める（ステップＳ５０３）。処理内容の詳細は後述する。
【０１１２】
次いで、求めた最小距離が線幅以下であるか否か判断する（ステップＳ５０４）。
【０１１３】
最小距離が線幅以上である場合（ステップＳ５０４のＮｏ）は、２本のストロークは重複しないので、次のストロークの組の判断に移行する。
【０１１４】
最小距離が線幅以下である場合（ステップＳ５０４のＹｅｓ）は、２本のストロークは重複するとわかり、更に、それらが平行であるかどうかを判断する（ステップＳ５０５）。
【０１１５】
平行である場合（ステップＳ５０５のＹｅｓ）は、格納順が後のストロークに対して平行の場合のストローク分割等を行う（ステップＳ５０６）。処理内容の詳細は後述する。
【０１１６】
平行でない場合（ステップＳ５０５のＮｏ）は、格納順が後のストロークに対して非平行の場合のストローク分割等を行う（ステップＳ５０７）。処理内容の詳細は後述する。
【０１１７】
ここで、平行の場合および平行でない場合の両者とも、格納順が後のストロークを分割等の対象とすることで、一つのストローク群内で重複する場合における複数のストロークの近接部分での寸断を防止することができる。
【０１１８】
最小距離が線幅以上である場合（ステップＳ５０４のＮｏ）と、ストローク分割等（ステップＳ５０６、Ｓ５０７）の後、注目しているストローク群内の全てのストロークの組を吟味したか否か判断し（ステップＳ５０８）、吟味していない場合（ステップＳ５０８のＮｏ）はストロークの組の取得（ステップＳ５０２）に戻る。
【０１１９】
注目しているストローク群内の全てのストロークの組を吟味した場合（ステップＳ５０８のＹｅｓ）は、全てのストローク群を吟味したか否か判断し（ステップＳ５０９）、吟味していない場合（ステップＳ５０９のＮｏ）はストローク群の取得（ステップＳ５０１）に戻り、吟味している場合（ステップＳ５０９のＹｅｓ）は分割処理が行われたか否か判断する（ステップＳ５１０）。
【０１２０】
分割処理が行われた場合（ステップＳ５１０のＹｅｓ）は分割されたストロークを境に別グループに分割し（ステップＳ５１１）、処理を終了する。分割処理が行われなかった場合（ステップＳ５１０のＮｏ）はそのまま処理を終了する。
【０１２１】
図２５はストローク間の最小距離を導出（図２４のステップＳ５０３）の処理例を示すフローチャートである。
【０１２２】
図２５において、処理を開始すると、距離を求める２本のストロークの端点が明らかに線幅以上であるか、すなわち、そのＸ座標同士、Ｙ座標同士の差が線幅以上であるか否か判断する（ステップＳ６０１）。
【０１２３】
明らかに線幅以上である場合（ステップＳ６０１のＹｅｓ）は、２本のストロークは重複しないので、正確な距離を求めることなく、非常に大きな距離を設定し（ステップＳ６０２）、処理を終了する。本処理の目的は、重複するかどうかの判定なので、線幅より遠い場合に計算は不要である。
【０１２４】
明らかに線幅以上でない場合（ステップＳ６０１のＮｏ）は、両ストロークが平行かどうかを判断する（ステップＳ６０３）。平行であるかどうかは、各ストロークの始点・終点を通る直線の式の傾きを比較することで行うことができる。
【０１２５】
平行であれば（ステップＳ６０３のＹｅｓ）、後段の処理を簡単にするために、両ストロークをＸ軸方向に平行になるように回転する（ステップＳ６０４）。
【０１２６】
次いで、回転したストローク同士が、Ｘ方向に重なりがあるかどうかを見る（ステップＳ６０５）。
【０１２７】
Ｘ方向に重なりがある場合（ステップＳ６０５のＹｅｓ）、直線同士の距離（Ｙ方向の差異）がストローク間距離の最小値なので、その値を距離として返し（ステップＳ６０６）、処理を終了する。図２６（ａ）に示すような場合が該当する。
【０１２８】
図２５に戻り、Ｘ方向に重なりがある場合（ステップＳ６０５のＮｏ）、端点同士の距離の最小値が、ストローク間距離の最小値なので、それを計算して返し（ステップＳ６０７）、処理を終了する。図２６（ｂ）に示すような場合が該当する。
【０１２９】
図２５に戻り、ストローク同士が平行でない場合（ステップＳ６０３のＮｏ）は、両ストロークの交点を求め、交点がストローク内にあるか否か判断する（ステップＳ６０８）。
【０１３０】
交点がストローク内に存在する場合（ステップＳ６０８のＹｅｓ）は、距離を「０」として返し（ステップＳ６０９）、処理を終了する。
【０１３１】
交点がストローク内に存在せず、その延長線上に存在する場合（ステップＳ６０８のＮｏ）は、まず、端点間の距離の最小値αを求める（ステップＳ６１０）。
【０１３２】
次いで、ある端点から、他方のストロークを通る直線上に垂線を下ろすことを考え、その足の座標を求める（ステップＳ６１１）。
【０１３３】
次いで、垂線の足がストローク内にあるか否か判断する（ステップＳ６１２）。
【０１３４】
足がストローク内にある場合（ステップＳ６１２のＹｅｓ）は、足までの距離βを求める（ステップＳ６１３）。図２７はα、βの例を示している。
【０１３５】
図２５に戻り、足がストローク内にない場合（ステップＳ６１２のＮｏ）はなにもしない。
【０１３６】
次いで、全ての端点について吟味したか判断し（ステップＳ６１４）、まだである場合（ステップＳ６１４のＮｏ）は垂線の足の導出（ステップＳ６１１）に戻る。
【０１３７】
全ての端点について吟味した場合（ステップＳ６１４のＹｅｓ）は、α、βの最小値をストローク間距離の最小値として返し（ステップＳ６１５）、処理を終了する。
【０１３８】
図２８は平行の場合のストローク分割等（図２４のステップＳ５０６）の処理例を示すフローチャートである。
【０１３９】
図２８において、処理を開始すると、２本のストロークをＸ軸と平行になるように回転する（ステップＳ７０１）。具体的には次のように処理を行う。
【０１４０】
先ず、Ｘ軸に対するそれぞれのストロークの回転角度を求める。回転角度に対するsin、cosをそれぞれsint、costとおき、ストロークの直線の式を
ax + by + c = 0
とすると、
sint = -a / sqrt(a * a + b * b)
cost = b / sqrt(a * a + b * b)
となる。
【０１４１】
それぞれのストロークを逆方向に回してＸ軸と平行にするが、ストロークの端点の座標値を（xs, ys）とし、回転後のストローク端点の座標値を（xs0, ys0）とおけば、
xs0 = cost * xs + sint * ys
ys0 = -sint *xs + cost *ys
となる。
【０１４２】
次いで、端点間距離が線幅となるように、一方を短縮可能か判断する（ステップＳ７０２）。具体的には次のように処理を行う。
【０１４３】
先ず、ストローク間の最短距離を求める。回転した２つのストロークの端点のＸ座標に重なりがあれば、最短距離は平行な線分間の距離である。また、重なりがなければ、各ストロークの端点間距離（端点はそれぞれ２つずつあるから計４とおりの距離がある）のうち、一番短いものがストローク間の最短距離となる。
【０１４４】
そして、最短距離が線幅ｔより小さい場合は、回転した２つのストロークの端点のＸ座標の重なり状態を吟味し、重ならない部分があれば一方を短縮可能と判断する。また、重ならない部分がなければ短い方のストロークを削除すると判断する。
【０１４５】
一方を短縮可能な場合（ステップＳ７０２のＹｅｓ）は、短縮処理を行う（ステップＳ７０３）。つまり、図２９（ａ）に示すように、Ｘ方向にずれており、短縮してもストロークが消滅しないだけの長さが残る場合には、短縮処理を行う。分割対象のストローク上にあり、他方のストロークの端点からの距離がｔである点を求めて、ここを分割対象のストロークの新たな端点とする。
【０１４６】
図２８に戻り、短縮不可能な場合（ステップＳ７０２のＮｏ）は、短いほうのストロークを削除する（ステップＳ７０４）。つまり、図２９（ｂ）に示すような場合には、短い方のストロークは長い方のストロークとの重複なしでは存在できないので、短いほうのストロークを削除する。
【０１４７】
図２８に戻り、次いで、削除したストロークの長さを算出して格納しておく（ステップＳ７０５）。
【０１４８】
次いで、処理した結果のストロークを、前述したsint、costを利用して、最初の処理とは逆方向に回転してもとの向きに戻し（ステップＳ７０６）、処理を終了する。
【０１４９】
図３０は非平行の場合のストローク分割等（図２４のステップＳ５０７）の処理例を示すフローチャートである。ストロークの分割等を行う場合のストロークの端点の位置算出にあたっては、図３１に示すようにストローク同士の角度の考慮が必要である．図３１（ａ）のような直交する場合は線幅分をカットすればよいので簡単であるが、図３１（ｂ）のように斜めに交叉している場合は角度を含めた考慮が必要である。
【０１５０】
なお、図３１、図３２に示すように、２本のストロークをストローク＃０、＃１と呼ぶこととし、ストローク＃１によりストローク＃０が分割・短縮されると仮定して処理を行う。
【０１５１】
図３０において、処理を開始すると、ストローク＃０上のストローク＃１からの距離が線幅ｔとなる点Ａ０、Ｂ０の座標を取得する（ステップＳ８０１）。具体的には次のように処理を行う。
【０１５２】
ストローク＃０（分割対象）の直線の式を
a0x + b0y + c0 = 0
とし、ストローク＃１（参照）の直線の式を
a1x + b1y + c1 = 0
とし、線幅をｔとおく。また、ストローク＃０上の点で、ストローク＃１からの距離がｔである点をP（xp, yp）とおく。
【０１５３】
Pはストローク＃０上の点であるから
a0xp + b0yp + c0 = 0・・・・（１）
となる。
【０１５４】
Ａ０からストローク＃１へおろした垂線の足までの長さがｔであるから、点と直線の距離の公式により、
(a1xp + b1yp + c1)2 = t2(a12 + b12)・・・・（２）
となる。
【０１５５】
式（１）（２）を連立方程式として解くと、ストローク＃０、＃１は平行でないから、
a1b0 - a0b1 ≠ 0
となるので、
【０１５６】
【数１】
0005659871.tif 000002
となる。２組の解のうちの一方がＡ０、他方がＢ０である。
【０１５７】
次いで、点Ａ０，Ｂ０からストローク＃１におろした垂線の足Ａ１、Ｂ１を求める（ステップＳ８０２）。図３２（ａ）はこの状態における例を示している。ストロークを直線で示し、描画される線幅の限界位置を破線で表現している。
【０１５８】
具体的には次のように処理を行う。
【０１５９】
垂線の足をQ（xq, yq）とおく。
【０１６０】
垂線の式を
a2x + b2y + c2 = 0
とおくと、これはストローク＃１と直交するから、
-b1x +a1y + c2 = 0・・・・（４）
と置き直せる。
式（４）は点Ａ０、Ｂ０を通るから、
-b1xp +a1yp + c2 = 0
となるので、c2が求まり、式（４）は、
-b1x + a1y + b1xp -a1yp = 0・・・・（５）
となる。
垂線の式とストローク＃１の交点が垂線の足だから、式（５）とストローク＃１の連立方程式
【０１６１】
【数２】
0005659871.tif 000003
を（x, y）について解けば、それが垂線の足の座標（xq, yq）である。よって、
【０１６２】
【数３】
0005659871.tif 000004
により求められる。
【０１６３】
図３０に戻り、次いで、Ａ１がストローク＃１の範囲内にあるか否か判断する（ステップＳ８０３）。ストローク＃１の端点座標を（x1s, y1s）、（x1e, y1e）とおけば、この座標値の範囲内に（xq, yq）があれば、範囲内にあることになる。
【０１６４】
Ａ１がストローク＃１の範囲内にあるなら（ステップＳ８０３のＹｅｓ）、Ａ０がストローク＃０の新たな端点となる（ステップＳ８０４）。
【０１６５】
Ａ１がストローク＃１の範囲内になければ（ステップＳ８０３のＮｏ）、Ａ０は新たな端点としては短縮しすぎである。そこで、ストローク＃１の端点から距離ｔ（線幅）にある、ストローク＃０上の点Ａ３を求める（ステップＳ８０５）。具体的には次のように処理を行う。
【０１６６】
ストローク＃１の端点の座標をH（xh, yh）とおく。点Ａ３の座標を（xr, yr）とおく。
【０１６７】
Ａ３は分割対象ストロークであるストローク＃０上にあるから、
a0xr + b0yr + c0 = 0・・・・（７）
となる。
【０１６８】
点Ａ３とＨの距離がｔであるから、
（xr - xh）2 +（yr -yh）2 = t2・・・・（８）
となる。
【０１６９】
式（７）（８）を連立方程式として解くと（xr, yr）を求めることができる。
【０１７０】
また、
ca = a02 + b02
cb = -b02xh + a0b0yh + a0c0
cc = b02（xh2 - t2）+（b0yh + c0)2
とおき、さらに、
【０１７１】
【数４】
0005659871.tif 000005
とおく。
【０１７２】
b0 ≠ 0のとき
【０１７３】
【数５】
0005659871.tif 000006
となり、求めたxrを使って、
【０１７４】
【数６】
0005659871.tif 000007
を得られる。
【０１７５】
b0 = 0のときa0 ≠ 0ゆえ,
【０１７６】
【数７】
0005659871.tif 000008
を得られる。
【０１７７】
そして、Ａ３を分割されたストロークの新しい端点とする（ステップＳ８０６）。図３２（ｂ）はこの状態における例を示している。
【０１７８】
図３０に戻り、Ｂ側についても同様に処理を行って新しい端点を求め（ステップＳ８０７）、削除したストローク長を求め（ステップＳ８０８）、処理を終了する。
【０１７９】
図３３は消滅可能性のあるストロークにマークを付与（図１８のステップＳ２０９）の処理例を示すフローチャートである。
【０１８０】
図３３において、処理を開始すると、ストローク群＃０、＃１として１つずつ選び（ステップＳ９０１、Ｓ９０２）、ストローク群＃０、＃１から１つずつストロークを選び（ステップＳ９０３）、両者のストロークに交点があるかどうか判断する（ステップＳ９０４）。
【０１８１】
交点があるなら（ステップＳ９０４のＹｅｓ）、交点座標と交叉角度を、ストローク群＃０に関連付けて交点配列（交点列データ）に格納する（ステップＳ９０５、Ｓ９０６）。交点がない場合（ステップＳ９０４のＮｏ）はなにも行わない。
【０１８２】
次いで、全てのストロークの組み合わせについて吟味したか否か判断し（ステップＳ９０７）、吟味していない場合（ステップＳ９０７のＮｏ）はストロークの組の選択（ステップＳ９０３）に戻る。
【０１８３】
全てのストロークの組み合わせについて吟味した場合（ステップＳ９０７のＹｅｓ）は、ストローク群＃１として全てのストローク群を吟味したか否か判断し（ステップＳ９０８）、吟味していない場合（ステップＳ９０８のＮｏ）は、ストローク群＃１の選択（ステップＳ９０２）に戻る。
【０１８４】
ストローク群＃１として全てのストローク群を吟味した場合（ステップＳ９０８のＹｅｓ）は、取得したストローク群＃０の交点座標群を、ストローク群＃１の始点に近い順にソートする（ステップＳ９０９）。
【０１８５】
次いで、隣接する交点間の距離を求める（ステップＳ９１０）。
【０１８６】
次いで、一つの交点間に注目し、その交点間の側にストローク＃１が存在するか否か判断する（ステップＳ９１１）。図３４（ａ）は、交点Ａ、Ｂの真ん中にストローク＃１との交点Ｃが存在し、今、交点Ａ、Ｃ間に注目しているとすると、ストローク＃１は左下に傾いているため、交点Ｃ、Ｂ間ではなく、交点Ａ、Ｃ側に存在すると判断される。
【０１８７】
図３３に戻り、注目する交点間の側にストローク＃１が存在する場合（ステップＳ９１１のＹｅｓ）は、交点間距離に対し、交叉角度による補正を行う（ステップＳ９１２）。図３４（ａ）のような場合、交点Ｃとその脇にある別のストロークとの交点Ａ、Ｂの距離はそれぞれ等しい。しかし、線には幅があるために、図３４（ｂ）のように交点Ａ側の実質的な距離ｄ１は反対側の交点Ｂ側の距離ｄ２よりも実質的には小さいとみなされる。仮に距離ｄ１が０になるとその間のストロークは消滅する可能性があるといえるので、角度による補正は重要である。もし、求める交点間距離が交点Ａの側であれば、角度による補正を行う。元の距離から距離ｄ３だけ差し引けばよいから、交叉角度をθ、線幅をｔとすると、
ｄ３  ＝  ｔ／２ｓｉｎθ
となる。
【０１８８】
図３３に戻り、注目する交点間の側にストローク＃１が存在しない場合（ステップＳ９１１のＮｏ）は、線幅の半分、すなわち、ｔ／２だけ交点間距離から差し引く（ステップＳ９１３）。図３４（ｂ）における交点Ｃ、Ｂ間についてはこの処理が行われる。
【０１８９】
図３３に戻り、次いで、補正後の距離が線幅以下であるか否か判断する（ステップＳ９１４）。
【０１９０】
もし距離が線幅以下となったら（ステップＳ９１４のＹｅｓ）、これら交点の両方でストローク＃０が分割された場合、この間にストロークは描画できない。従って、消滅可能性ありと判断してストローク群＃０にマークをつける（ステップＳ９１５）。線幅以下でない場合（ステップＳ９１４のＮｏ）はマークを行わない。
【０１９１】
次いで、ストローク群＃０として全ての群を吟味したか否か判断し（ステップＳ９１６）、吟味していない場合（ステップＳ９１６のＮｏ）は最初の処理（ステップＳ９０１）に戻り、吟味した場合（ステップＳ９１６のＹｅｓ）は処理を終了する。
【０１９２】
図３５および図３６はストローク群同士の重複除去（図１８のステップＳ２１０）の処理例を示すフローチャートである。
【０１９３】
図３５において、処理を開始すると、ストローク群＃０、＃１として別々のストローク群を選ぶ（ステップＳ１００１、Ｓ１００２）。
【０１９４】
次いで、ストローク群＃０、＃１から１つずつストロークを選ぶ（ステップＳ１００３）。
【０１９５】
次いで、２つのストロークに重複部があるかどうか判定する（ステップＳ１００４）。
【０１９６】
重複があれば（ステップＳ１００４のＹｅｓ）、一方のストロークを短縮・分割すると仮定して、削除長、残存ストロークをそれぞれ計算する（ステップＳ１００５）。この処理は、図２４に示したものと同様になる。
【０１９７】
図３５に戻り、重複がなければ（ステップＳ１００４のＮｏ）、上記の処理（ステップＳ１００５）は行わない。
【０１９８】
次いで、ストローク群＃０，１に属する全てのストロークについて吟味したか否か判断し（ステップＳ１００６）、吟味していない場合（ステップＳ１００６のＮｏ）は、ストロークの組の選択（ステップＳ１００３）に戻る。
【０１９９】
全てのストロークについて吟味した場合（ステップＳ１００６のＹｅｓ）は、一方のストローク群を短縮・分割する場合の合計削除面積をそれぞれ算出する（ステップＳ１００７）。削除長に線幅をかけることによって合計削除面積が取得できる。
【０２００】
次いで、一方のストローク群を短縮・分割する場合に、注目するストローク群が完全に消える場合にはフラグｔｅｒｍに「２」を、先頭部が短縮される場合にはフラグｔｅｒｍに「１」を、その他はフラグｔｅｒｍに「０」を立てる（ステップＳ１００８）。
【０２０１】
次いで、ストローク群同士（ストローク群＃０、＃１）が重複しないか否か判断する（ステップＳ１００９）。
【０２０２】
重複しない場合（ステップＳ１００９のＹｅｓ）は以下の重複する場合の処理（ステップＳ１０１０〜Ｓ１０１５）をスキップする。
【０２０３】
重複がある場合（ステップＳ１００９のＮｏ）は、一方のストローク群を短縮・分割する場合の交点と消滅可能性のあるストロークにマークを付ける処理（図３３）で得られた交点列を照合する（ステップＳ１０１０）。
【０２０４】
次いで、ストロークが消滅する可能性がある交点で一致したらフラグｖａｎｉｓｈを立てる（ステップＳ１０１１）。
【０２０５】
次いで、消滅可能性のあるストロークで既に分割が行われていたらフラグｆｌａｇを立てる（ステップＳ１０１２）。
【０２０６】
次いで、ストローク群が別のストローク群と重複し、その別のストローク群に消滅可能性があればフラグｏｔｈｅｒを立てる（ステップＳ１０１３）。別のストローク群に消滅可能性があるか否かは、図３３の処理により付されたマークの有無により判断する。
【０２０７】
次いで、図３５に戻り、フラグ群からどちらのストローク群を短縮・分割するかを選択する（ステップＳ１０１４）。処理内容の詳細は後述する。
【０２０８】
次いで、選択されたストローク群のストロークを先に計算しておいたデータに基づき短縮・分割する（ステップＳ１０１５）。
【０２０９】
次いで、ストローク群＃１と異なるストローク群は全て吟味したか否か判断し（ステップＳ１０１６）、吟味していない場合（ステップＳ１０１６のＮｏ）はストローク群＃１の選択（ステップＳ１００２）に戻る。
【０２１０】
全て吟味した場合（ステップＳ１０１６のＹｅｓ）は、ストローク群＃０としてストローク群は全て吟味したか否か判断し（ステップＳ１０１７）、吟味していない場合（ステップＳ１０１７のＮｏ）は最初の処理（ステップＳ１００１）に戻る。
【０２１１】
全て吟味した場合（ステップＳ１０１７のＹｅｓ）は、再度の重複の判断および短縮の処理を行う。すなわち、わずかに他のストロークに接触していた場合に分割が発生した場合、それらの端点間の距離が線幅以下になる場合がある。こうした場合、ここに重複が残ることになるので、再度吟味し、短縮する。例えば、図３７（ａ）に示すように、もともと上下にあるストローク群同士の重複を除去するに際し、下のストローク群を分割して図３７（ｂ）のようになった場合に、こんどは連続しなくなったストロークによって重複が発生している。このような場合は、下部のストロークをさらに短縮する必要がある。
【０２１２】
図３６において、短縮・分割の対象として選択されたストローク群から、ストローク＃０として１つのストロークを選び（ステップＳ１０１８）、ストローク＃１としてストローク＃０と異なるストロークを選ぶ（ステップＳ１０１９）。
【０２１３】
次いで、２つのストロークが連続するか否か判断し（ステップＳ１０２０）、連続しない場合（ステップＳ１０２０のＮｏ）は、更に、端点間距離が線幅未満であるか否か判断する（ステップＳ１０２１）。
【０２１４】
線幅未満である場合（ステップＳ１０２１のＹｅｓ）は、ストローク＃１を短縮する（ステップＳ１０２２）。
【０２１５】
ストロークが連続しない場合（ステップＳ１０２０のＹｅｓ）と端点間距離が線幅未満でない場合（ステップＳ１０２１のＮｏ）は、ストローク＃１の短縮（ステップＳ１０２２）は行わない。
【０２１６】
次いで、全てのストローク＃１について吟味したか否か判断し（ステップＳ１０２３）、吟味していない場合（ステップＳ１０２３のＮｏ）はストローク＃１の選択（ステップＳ１０１９）に戻る。
【０２１７】
全てのストローク＃１について吟味した場合（ステップＳ１０２３のＹｅｓ）は、全てのストローク＃０について吟味したか否か判断し（ステップＳ１０２４）、吟味していない場合（ステップＳ１０２４のＮｏ）はストローク＃０の選択（ステップＳ１０１８）に戻る。
【０２１８】
全てのストローク＃０について吟味した場合（ステップＳ１０２４のＹｅｓ）は処理を終了する。
【０２１９】
図３８はフラグ群からどちらのストローク群を短縮・分割するかを選択（図３５のステップＳ１０１４）の処理例を示すフローチャートである。
【０２２０】
図３８において、処理を開始すると、フラグｔｅｒｍから判断して、ストローク群＃１が残存し、ストローク群＃０のみ完全に消去され、１本のストロークも残らない場合（ステップＳ１１０１のＹｅｓ）は、ストローク群＃１側を分割・短縮する（ステップＳ１１１７）。
【０２２１】
逆に、ストローク＃０が残存し、ストローク群＃１のみが完全に消去される場合（ステップＳ１１０２のＹｅｓ）は、ストローク群＃０を分割・短縮する（ステップＳ１１１６）。
【０２２２】
ストローク群＃０のみが、群の端だけの短縮となる場合（ステップＳ１１０３のＹｅｓ）は、ストローク群＃０を短縮する（ステップＳ１１１６）。これは、分割よりも短縮の方が見栄えに影響が少ないためである。
【０２２３】
逆の場合（ステップＳ１１０４）は、ストローク群＃１を短縮する（ステップＳ１１１７）。
【０２２４】
太文字の場合（ステップＳ１１０５のＹｅｓ）は、ストローク群＃０の方が、中心部のストロークに近い場合（ステップＳ１１０６のＹｅｓ）は、ストローク群＃１を分割・短縮する（ステップＳ１１１７）。これは、中心線を残したほうが見栄えが良いためである。図３９は太文字の場合の描画例を示しており、（ａ）は中心線を残す配慮をしない場合、（ｂ）は中心線を残す配慮をした場合である。
【０２２５】
図３８に戻り、ストローク群＃１の方が、中心部のストロークに近い場合（ステップＳ１１０７のＹｅｓ）は、ストローク＃０を分割、短縮する（ステップＳ１１１６）。
【０２２６】
次いで、フラグｖａｎｉｓｈから判断して、ストローク群＃０のみが、一部消滅の可能性がある場合（ステップＳ１１０８のＹｅｓ）は、ストローク群＃１を分割・短縮する（ステップＳ１１１７）。
【０２２７】
逆の場合（ステップＳ１１０９のＹｅｓ）は、ストローク群＃０を分割・短縮する（ステップＳ１１１６）。
【０２２８】
両方のストローク群ともｖａｎｉｓｈによって消滅の可能性がある場合（ステップＳ１１１０のＹｅｓ）は、フラグｆｌａｇを使い、既に一部消滅につながる分割をしているかどうかを判断する。あるストローク群で隣り合う交点の距離が線幅より小さい場合、どちらか一方の交点で既に分割が行われている場合に相当する。仮に、もう一方でも分割が行われた場合、この交点間のストロークは消滅する。
【０２２９】
したがって、ストローク群＃０のみで既に分割が行われている場合（ステップＳ１１１１のＹｅｓ）は、ストローク群＃１を分割・短縮する（ステップＳ１１１７）。
【０２３０】
逆の場合（ステップＳ１１１２のＹｅｓ）は、ストローク群＃０を分割、短縮する（ステップＳ１１１６）。
【０２３１】
次いで、フラグｏｔｈｅｒを使い、ストローク群＃０のみが、別のストロークと交わっており、その別のストロークに一部消滅の可能性がある場合（ステップＳ１１１３のＹｅｓ）に、ストローク＃１を分割対象とする（ステップＳ１１１７）。これは、別ストロークで消滅がおきないよう、ストローク＃０に分割・短縮を行う余裕を残しておきたいためである。
【０２３２】
逆の場合（ステップＳ１１１４のＹｅｓ）はストローク＃０を分割・短縮する（ステップＳ１１１６）。
【０２３３】
次いで、削除面積を比較し、ストローク群＃０の方が小さければ（ステップＳ１１１５のＹｅｓ）、ストローク＃０を分割、短縮する（ステップＳ１１１６）。
【０２３４】
そうでなければ（ステップＳ１１１５のＮｏ）、ストローク＃１を短縮・分割する（ステップＳ１１１７）。
【０２３５】
図４０は従来の問題点が改善された例を示す図である。すなわち、従来は図３（ｂ）で説明したように、複数のストロークが接近する場合にストロークが寸断され、描画品質の低下を招いていた。しかし、本実施形態によれば、同じ文字について図４０（ａ）に示すように、ストローク群間の重複除去により、ストローク群の単位で分割等が行われるため、複数のストロークが接近する部分でストロークが寸断されることがなくなり、描画品質の低下を防止することができる。
【０２３６】
また、図４０（ｂ）に示すように、文字「α」のような一つのストローク群内で重複部分が存在する場合については、ストローク群内の重複除去により、ストローク群内のストロークの配置順序から別のストローク群に属するのと同様に重複除去が行われ、複数のストロークが接近する部分でストロークが寸断されることがなくなり、描画品質の低下を防止することができる。
【０２３７】
＜総括＞
以上説明したように、本実施形態によれば、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することができる。
【０２３８】
以上、本発明の好適な実施の形態により本発明を説明した。ここでは特定の具体例を示して本発明を説明したが、特許請求の範囲に定義された本発明の広範な趣旨および範囲から逸脱することなく、これら具体例に様々な修正および変更を加えることができることは明らかである。すなわち、具体例の詳細および添付の図面により本発明が限定されるものと解釈してはならない。
【符号の説明】
【０２３９】
１            サーマルリライタブルメディア描画装置
１１          全体制御装置
１１１        ＣＰＵ
１１２        メモリ
１１３        記憶装置
１１３１      フォントデータＤＢ
１１３２      文字描画プログラム
１１４        入力装置
１１５        ディスプレイ
１１６        ＣＤ／ＤＶＤドライブ
１１７        ネットワーク装置
１２          レーザ照射部
１３          レーザ発振器
１４          スポット径調整レンズ
１５          方向制御ミラー
１６          方向制御用モータ
１７          焦点距離調整レンズ
２            サーマルリライタブルメディア
３１          ＣＤ／ＤＶＤ
【先行技術文献】
【特許文献】
【０２４０】
【特許文献１】特開２００４−９００２６号公報
【特許文献２】特開２００４−３４１３７３号公報
【図１】
0005659871.tif 000009
【図２】
0005659871.tif 000010
【図３】
0005659871.tif 000011
【図４】
0005659871.tif 000012
【図５】
0005659871.tif 000013
【図６】
0005659871.tif 000014
【図７】
0005659871.tif 000015
【図８】
0005659871.tif 000016
【図９】
0005659871.tif 000017
【図１０】
0005659871.tif 000018
【図１１】
0005659871.tif 000019
【図１２】
0005659871.tif 000020
【図１３】
0005659871.tif 000021
【図１４】
0005659871.tif 000022
【図１５】
0005659871.tif 000023
【図１７】
0005659871.tif 000024
【図１８】
0005659871.tif 000025
【図１９】
0005659871.tif 000026
【図２０】
0005659871.tif 000027
【図２２】
0005659871.tif 000028
【図２３】
0005659871.tif 000029
【図２４】
0005659871.tif 000030
【図２５】
0005659871.tif 000031
【図２６】
0005659871.tif 000032
【図２７】
0005659871.tif 000033
【図２８】
0005659871.tif 000034
【図２９】
0005659871.tif 000035
【図３０】
0005659871.tif 000036
【図３１】
0005659871.tif 000037
【図３２】
0005659871.tif 000038
【図３３】
0005659871.tif 000039
【図３４】
0005659871.tif 000040
【図３５】
0005659871.tif 000041
【図３６】
0005659871.tif 000042
【図３７】
0005659871.tif 000043
【図３８】
0005659871.tif 000044
【図４０】
0005659871.tif 000045
【図１６】
0005659871.tif 000046
【図２１】
0005659871.tif 000047
【図３９】
0005659871.tif 000048