"描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段と、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段とを備えたことを特徴とするサーマルリライタブルメディア描画装置。サーマルリライタブルメディア描画装置の制御装置が、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する工程と、前記制御装置が、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する工程と、前記制御装置が、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する工程とを備えたことを特徴とするサーマルリライタブルメディア描画制御方法。サーマルリライタブルメディア描画装置の制御装置を構成するコンピュータを、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段として機能させるサーマルリライタブルメディア描画制御プログラム。線幅を含めたストロークの重複の除去を上述したようにして行う場合、複数のストロークが接近する場合にストロークが寸断され、描画品質の低下を招くという問題があった。図3aは筆記体の小文字のエックスを描画する場合の重複除去前の状態を示しており、一筆書きとして連続するストロークST1~ST7とストロークST8~ST14により描画するものとしている。この場合、上述した手法で重複除去を行うと、図3bに示すような状態になる。すなわち、ストロークST3、ST6、ST9、ST12は一端が短縮されてストロークST3、ST6、ST9、ST12となり、ストロークST4、ST11は消去され、ストロークST10、ST5は両端が短縮されてストロークST10、ST5となる。このようなストロークの寸断による描画品質の低下は、一筆書きとして連続するストロークが複数に分かれる場合だけではなく、図4に示すような一筆書きで描画される文字αにおける交叉部分や、文字すのループ部分等でも生じる。本発明は上記の問題点に鑑み提案されたものであり、その目的とするところは、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することのできるサーマルリライタブルメディア描画装置を提供することにある。上記の課題を解決するため、本発明にあっては、請求項1に記載されるように、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段と、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段とを備えるサーマルリライタブルメディア描画装置を要旨としている。また、請求項2に記載されるように、サーマルリライタブルメディア描画装置の制御装置が、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する工程と、前記制御装置が、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する工程と、前記制御装置が、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する工程とを備えるサーマルリライタブルメディア描画制御方法として構成することができる。また、請求項3に記載されるように、サーマルリライタブルメディア描画装置の制御装置を構成するコンピュータを、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段として機能させるサーマルリライタブルメディア描画制御プログラムとして構成することができる。本発明のサーマルリライタブルメディア描画装置にあっては、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することができる。以下、本発明の好適な実施形態につき説明する。<構成>図5は本発明の一実施形態にかかるサーマルリライタブルメディア描画装置1の構成例を示す図である。図5において、サーマルリライタブルメディア描画装置1は、装置全体を制御する全体制御装置11と、レーザ光を照射するレーザ照射部12とを有する。また、レーザ照射部12は、レーザ光を発生するレーザ発振器13と、レーザ光のスポット径を調整スポット径を大きくするするスポット径調整レンズ14と、レーザ光の照射方向を変える方向制御ミラー15と、方向制御ミラー15を駆動する方向制御用モータ16と、方向制御ミラー15により方向の変えられたレーザ光をサーマルリライタブルメディア2上に収束させる焦点距離調整レンズ17とを有している。レーザ発振器13は、半導体レーザLDLaserDiodeが一般に用いられるが、気体レーザ発振器、固体レーザ発振器、液体レーザ発振器等であってもよい。方向制御用モータ16は、方向制御ミラー15の反射面の向きを2軸に制御する例えばサーボモータである。方向制御用モータ16と方向制御ミラー15とによりガルバノミラーを構成する。サーマルリライタブルメディア2は、例えばロイコ染料と顕色剤が分離した状態で膜を形成し、そこに所定温度Taの熱を加え急冷することでロイコ染料と顕色在が結合して発色し、所定温度Taよりも低い所定温度Tbを加えるとロイコ染料と顕色剤が分離した状態に戻ることで消色するメディア、例えば書き換え可能な感熱タイプの紙である。本実施形態では、このような書き換え可能なサーマルリライタブルメディア2の劣化抑制を可能とするが、サーマルペーパのように書き換えが可能でないメディアに対しても適用することができる。図6は全体制御装置11の構成例を示す図である。ここでは、主にソフトウェアによって全体制御装置11を実装する場合のハードウェア構成を示しており、コンピュータを実体としている。コンピュータを実体とせず全体制御装置11を実現する場合、ASICApplicationSpecificIntegratedCircuit等の特定機能向けに製造されたICを利用する。全体制御装置11は、CPU111、メモリ112、記憶装置113、入力装置114、ディスプレイ115、CD/DVDドライブ116およびネットワーク装置117を有している。ハードディスクドライブ等の記憶装置113には、ストロークフォントおよびアウトラインフォントの一連の文字のフォントデータを記憶するフォントデータDB1131と、フォントデータから重複を排除した描画命令を生成しレーザ照射部12図5を制御する文字描画プログラム1132が記憶されている。CPU111は、記憶装置113から文字描画プログラム1132を読み出して実行し、後述する手順で、サーマルリライタブルメディア2に文字を描画する。メモリ112は、DRAMなどの揮発性メモリで、CPU111が文字描画プログラム1132を実行する際の作業エリアとなる。入力装置114は、マウスやキーボードなどレーザ照射部12を制御する指示をユーザが入力するための装置である。ディスプレイ115は、例えば文字描画プログラム1132が指示する画面情報に基づき所定の解像度や色数で、GUIGraphicalUserInterface画面を表示するユーザインタフェースとなる。例えば、サーマルリライタブルメディア2に描画する文字の入力欄等が表示される。CD/DVDドライブ116は、CD/DVD31を脱着可能に構成され、CD/DVD31からデータを読み出し、また、データを書き込む。フォントデータDB1131および文字描画プログラム1132は、CD/DVD31に記憶された状態で配布され、CD/DVD31から読み出されて記憶装置113にインストールされる。CD/DVD31は、この他、ブルーレイディスク、SDカード、メモリースティック登録商標、マルチメディアカード、xDカード等、不揮発性のメモリで代用することができる。ネットワーク装置117は、LANやインターネットなどのネットワークに接続するためのインターフェイス例えばイーサネット登録商標カードであり、OSI基本参照モデルの物理層、データリンク層に規定されたプロトコルに従う処理を実行して、レーザ照射部12に文字コードに応じた描画命令を送信することを可能とする。フォントデータDB1131および文字描画プログラム1132は、ネットワークを介して接続した所定のサーバからダウンロードすることができる。なお、ネットワーク経由でなく、USBUniversalSerialBus、IEEE1394、ワイヤレスUSB、Bluetooth等で直接、全体制御装置11とレーザ照射部12を接続してもよい。サーマルリライタブルメディア2に描画される描画対象の文字は、例えばリスト状に記憶装置113に記憶されているか、入力装置114から入力される。文字は、UNICODEやJISコードなどの文字コードで特定され、全体制御装置11は文字コードに対応する文字のフォントデータをフォントデータDB1131から読み出し、それを描画命令に変換することでレーザ照射部12を制御する。図7~図14はサーマルリライタブルメディア描画装置1の全体制御装置11における処理に際して用いられるデータ例を示したものである。図7はユーザの指定するパラメータのデータ構造例を示す図であり、文字種文字列文字コード列太文字平行ストロークの本数、重なり幅文字サイズ幅、高さ文字間隔行間隔行方向描画範囲描画可能範囲回転等の項目を有している。図8は描画文字管理データの構造例を示す図であり、描画対象文字ごとに、通番描画順文字コード描画位置X座標、Y座標描画倍率等の項目を有している。図9はフォントデータの構造例を示す図であり、文字の線芯の軌跡で表現したストロークフォントデータと、文字の輪郭の軌跡で表現したアウトラインフォントデータとを含んでいる。ストロークフォントデータは、文字ごとに文字コードにストロークフォントデータが対応付けられている。アウトラインフォントデータは、文字コードにアウトラインフォントデータが対応付けられている。図10aはストロークフォントのデータ構造例を示す図であり、文字コードを表わすcで始まる行に続き、移動を表わすmで始まる行と、直線描画を表わすdで始まる行と、この例では出現しないが、曲線描画を表わすbで始まる行とが列記されている。図10aのストロークフォントデータに対応する文字を図9bに示している。図11aはアウトラインフォントのデータ構造例を示す図であり、文字コードを表わすcで始まる行に続き、移動を表わすmで始まる行と、直線描画を表わすdで始まる行と、曲線描画を表わすbで始まる行とが列記されている。図11aのアウトラインフォントデータに対応する文字を図11bに示している。図12aはストローク群管理データの構造例を示す図であり、ストローク群の通し番号を表わすGNで始まる行と、属するストロークの総数を表わすNMで始まる行に続き、このストローク群に属するストロークのデータが列記されている。各ストロークのデータは、ストローク番号を表わすSNで始まる行と、始点のX座標を表わすXSで始まる行と、始点のY座標を表わすYSで始まる行と、終点のX座標を表わすXEで始まる行と、終点のY座標を表わすYEで始まる行とを含んでいる。図12aに対応するストローク群の例を図12bに示している。図13は各ストローク群に対応付けられた交点列データの構造例を示す図であり、各交点につき、第1のストローク群番号第1のストローク群のストローク番号第2のストローク群番号第2のストローク群のストローク番号交点座標交叉角度等の項目を有している。図14は各ストローク群に対応付けられたフラグ等データの構造例を示す図であり、消滅可能性マークフラグtermフラグvanishフラグflagフラグother合計削除面積等の項目を有している。<動作>図15は上記の実施形態の処理の概要を示すフローチャートである。また、図16aは通常文字描画の例を示しており、図16bは太文字描画の例を示している。図15において、処理を開始すると、各描画対象文字について、1もしくは複数のストロークから構成されるフォント線芯情報を取得するステップS11。図16aのiはその状態を示している。太文字描画の場合も同様である。次いで、図15に戻り、ストロークが連続するストローク群を抽出するステップS12。図16aのiiはその状態を示している。太文字描画の場合も同様である。次いで、図15に戻り、太文字描画の場合は、線幅を増やすための平行ストロークを生成するステップS13。図16bのiiiはその状態を示している。次いで、図15に戻り、ストローク群内の重複除去を行うステップS14。図16abのivはその状態を示している。この例では、文字すの上から下に書き下ろす途中のループ部分の根元の重複部分が除去される。次いで、図15に戻り、ストローク群間の重複除去を行うステップS15。図16abのvはその状態を示している。この例では、文字すの上部の左から右に直線的に伸びるストロークと上から下に書き下ろすストロークとの交叉における重複部分が除去される。次いで、図15に戻り、重複の除去された描画データを出力しステップS16、描画が行われて処理を終了する。図17は上記の実施形態の処理例を示すフローチャートである。図17において、処理を開始すると、ユーザが与えたパラメータに形式的な不備がないか否かチェックを行うステップS101。次いで、ユーザが与えたパラメータから文字コード、文字間隔、行間隔等を取得し、1文字ずつ描画位置を導出し、描画文字管理データに設定するステップS102。次いで、描画倍率を文字ごとに導出し、描画文字管理データに設定するステップS103。フォントは例えば256×256画素のメッシュ上の座標値として定義されている。これをユーザが与えた文字サイズ例えば、横3センチ、縦2.5センチに拡大するための倍率を導出する。ストロークは太さ線幅を持つので、ユーザが与えた文字サイズよりも、上下左右を線幅の半分だけ文字サイズを小さく考えて、描画倍率を導出する。太文字を描く場合は、ユーザにより指定された平行ストロークの本数に従い、ストロークを例えば3本~9本、平行に描くため、線幅が3~9倍になったとみなし、描画倍率をその分小さく設定する。次いで、先頭から1文字ずつ、文字がユーザ指定の描画範囲や、描画可能範囲≒媒体の広さを超えていないか判断するステップS104。回転が指定されている場合があるので、回転した場合にはみ出ないことを確認する。次いで、はみ出る文字は描画対象文字から抹消描画文字管理データを削除するステップS105。次いで、全ての文字について処理したか否か判断しステップS106、処理していない場合ステップS106のNoは、はみだしの判断ステップS104に戻る。全ての文字について処理した場合ステップS106のYesは、文字の描画順を、高速になるように並べ替えるステップS107。文字列は例えば横書きで描画され、左から右、上から下の順に描画するように初期定義されるが、ある文字行の右端から1段下の文字行の左端までの距離が遠いため、描画時間が多くかかる。そのため、1行おきに左から右、右から左と描画の向きを変える処理を行う。次いで、設定された描画順に従い、1文字ずつ、フォントデータからストローク情報を取得するステップS108。すなわち、フォントデータから、先に定義された描画倍率に従ってストロークの座標を取得する。通常の文字を描画するならストロークフォントからストローク情報を取得し、袋文字を描画するならアウトラインフォントからストローク情報を取得する。次いで、ストロークの重複除去を行うステップS109。ストロークが重複すると過熱するため、これを防ぐために、ストロークを過不足なく分割したり、短縮したり、削除したりする処理である。ストロークは線分情報であるが、実際には線幅を持つため、ストローク同士が交叉する場合だけでなく、ストローク同士が接近するだけでも重複除去を行う必要がある。処理内容の詳細は後述する。次いで、全ての文字について処理したか否か判断しステップS110、処理していない場合ステップS110のNoは、ストローク情報の取得ステップS108に戻る。全ての文字について処理した場合ステップS110のYesは、白抜き文字への変換処理を行うステップS111。白抜き文字を描画する場合に限り行われる処理である。次いで、ストロークをパラメータにしたがって回転するステップS112。ストロークは線分の端点座標で定義されるので、これを単純に回転させればよい。次いで、内部で扱っているストロークのデータ形式を、描画コントローラ下位コントローラで解釈可能な、描画データの形式に変換しステップS113、処理を終了する。図18はストロークの重複除去図17のステップS109の処理例を示すフローチャートである。図18において、処理を開始すると、処理対象の文字1つに対し、これが塗りつぶし文字であるかどうかを判定するステップS201、S202。塗りつぶし文字とは、●、★など、通常のストロークでは表現しづらい文字を、塗りつぶしを行う平行ストロークによって定義した文字である。きわめて細かいピッチの線分データがフォントデータに格納されているため、描画対象の線幅にあわせて間引く必要がある。判断は、ストロークがほぼすべて平行であるかどうかで行う。塗りつぶし文字の場合ステップS202のYesは、いったんビットマップ化し、そのビットマップを内部でスキャンすることで改めてストロークを定義するステップS203。そして、処理を終了する。塗りつぶし文字でない場合ステップS202のNoは、ストロークの統合を行うステップS204。フォントデータに格納されているストロークは、同一直線上にありながら、複数の線分が重複して定義されていることがある。これを1本の直線にまとめて処理の効率化を図る。次いで、ストロークすべてについて、端点が同一であるストローク同士は隣り合って格納されるよう、格納順を並べ替えるステップS205。次いで、反転文字描画であるか否か判断するステップS206。反転文字描画の場合ステップS206のYesは、処理をここで終了する。まだ重複が残っているが、格納された文字データ自体は描画対象ではないので、以降の重複除去処理は不要になる。反転文字描画でない場合ステップS206のNoは、ストロークのグループ群化を行うステップS207。端点が同一となる複数のストロークは連続しているとみなしてグループ化する処理である。描画の際、連続するストロークはレーザをOFFにせず続けて描画する。このグループは、連続した一群のストロークの単位である。処理内容の詳細は後述する。次いで、ストローク群の一つ一つについて、グループ内で重複があるかどうかを判断し、あればストロークの分割、短縮、削除を行うステップS208。処理内容の詳細は後述する。次いで、消滅可能性のあるストローク群にマークを付けるステップS209。分割短縮削除を行った場合に、ストローク全体が消えてしまったり、2つのストロークにはさまれた部分が消えてしまったりすると、情報量が欠落して視認性が大きく低下すると考えられるので、こうしたストロークは分割や短縮が行われにくいよう、判別してマークをつけておく処理である。処理内容の詳細は後述する。次いで、ストローク群を2つ選び、それらが重複している場合は重複除去を行うステップS210。処理内容の詳細は後述する。次いで、ストローク群の端点を延長するステップS211。端点部は熱が逃げやすいため、実際に描画すると狙いより線が短くなってしまう。そこで、ストローク群の端点部を少し延長して長めに描画することで、結果として狙い通りの長さの線を描くことができる。次いで、文字内ストローク順を並べ替えるステップS212。効率の良い順番で描くことで、無駄なジャンプ空走を減らして、実際にレーザマーカで描く際の描画時間を短縮することができる。次いで、交点ジャンプ設定を行うステップS213。交点ジャンプとは、マーク速度と同じ速度でジャンプを行うことを指す。通常、ジャンプはマーク描画よりも高速で行われるため、その前後にはミラーを安定させるためにある程度の待ち時間ディレイを置かなければならない。マークとマークにはさまれたジャンプの速度をマークと同じにすることで、待ち時間の挿入が不要になるため、描画にかかる時間を節約できる。その後、処理を終了する。図19はストロークのグループ化図18のステップS207の処理例を示すフローチャートである。図19において、処理を開始すると、処理対象が太文字かどうかを判断するステップS301。これはユーザにより与えられたパラメータから判断する。太文字の場合ステップS301のYesは、以下の太文字についての処理ステップS302~S307を行う。太文字でない場合ステップS301のNoは、太文字についての処理ステップS302~S307を行わない。太文字についての処理では、まず、2つのストロークを選びステップS302、始点終点が一致するかどうかを判断するステップS303。一致する場合ステップS303のYes、更に、一致点を中心とする角度が85度を越えるか否か判断するステップS304。図20は始点終点が一致する2つのストロークと判断する角度の例を示している。角度85度の意味については後述する。図19に戻り、一致点を中心とする角度が85度を超える場合ステップS304のNo、両者を同一グループとしてまとめるステップS305。始点終点が一致しない場合ステップS303のNoもしくは始点終点が一致する2つのストロークの角度が85度を越えない場合ステップS304のYesは、グループ化ステップS305を行わない。次いで、すべての組み合わせを吟味したか否か判断しステップS306、吟味していない場合ステップS306のNoは2つのストロークの選択ステップS302に戻る。すべての組み合わせについて吟味した場合ステップS306のYesは、太くする分だけ、平行ストロークを発生させるステップS307。例えば3本線で太線を表現する場合には、ストロークの脇に1本ずつ、計2本の平行なストロークを発生させる。処理内容の詳細は後述する。次いで、太文字の場合も、そうでない場合も、2つのストロークを選びステップS308、始点終点が一致するかどうかを判断するステップS309。一致する場合ステップS309のYes、更に、一致点を中心とする角度が135度を越えるか否か判断するステップS310。角度135度の意味については後述する。一致点を中心とする角度が135度を超える場合ステップS310のNo、両者を同一グループとしてまとめるステップS311。始点終点が一致しない場合ステップS309のNoもしくは始点終点が一致する2つのストロークの角度が135度を越えない場合ステップS310のYesは、グループ化ステップS311を行わない。次いで、すべての組み合わせを吟味したか否か判断しステップS312、吟味していない場合ステップS312のNoは2つのストロークの選択ステップS308に戻る。すべての組み合わせについて吟味した場合ステップS312のYesは、処理を終了する。以上の処理で角度が重要になるのは、急角度での折れ曲がりを別のストローク群にするためである例えば、文字ヌの右上部分。ミラーの慣性により、折れ曲がり部は向きを変えるのに時間がかかり、長い時間レーザが照射され、過熱してしまう。よって、この部分は別のストローク群にしていったんレーザをOFFにする必要がある。太文字の場合は、新たに生成した平行ストロークをグループ化する必要があることと、グループ化するための角度条件が異なるので、2度のグループ化が必要である。角度条件を仮に設けないとすると、急角度の折れ曲がり部分は図21aのような結果になってしまう。もし、角度条件を後段の処理の135度と同じにすると、図21bのような結果となり、文字5の左上の見栄えが良くない。そこで、適正な角度85度で処理を行うことで、図21cのような結果が得られる。図22は太くする分だけ並行ストロークを生成図19のステップS307の処理例を示すフローチャートである。図22において、処理を開始すると、ストローク群を新たに生成するため、格納に必要なストローク群配列ストローク群管理データを新たに確保するステップS401。次いで、元ストローク群番号の修正を行うステップS402。ストローク群には番号を付けて識別に利用しているが、現時点では0から始まる1刻みの値が入っている。これを、ユーザによって指定された平行ストロークの本数にあわせて変更する。例えば、太線を3本のストロークを並べて表現する場合は、現在あるストローク群番号を0,1,2,3,,nから1,4,7,10,,3n1に変更する。5本の場合は、2,7,12,17,,5n2と変更する。つまり、平行ストロークがi本ある場合は、同一ストローク群から派生した平行ストローク群が連続して格納されるようにし、その連続の中心に現在あるストロークが位置するようにする。これは、後段で、どれが中心ストロークかを判断できるようにするための処理である。次いで、1つのストローク群を取得しステップS403、そのストローク群の1つのストロークを取得しステップS404、このストロークの単位法線ベクトルを求めるステップS405。単位法線ベクトルはストロークの始点終点を通る直線の式から求められる。次いで、単位法線ベクトルの方向に線幅分だけシフトした位置に、注目しているストロークと同じ長さの新たなストロークを生成するステップS406。正確には、ユーザが指定する重なり幅FillOverlap分だけ、シフト位置は小さくする。次いで、注目しているストローク群に含まれる全てのストロークを吟味したか否か判断しステップS407、吟味していない場合ステップS407のNoはストロークの取得ステップS404に戻る。全てのストロークを吟味した場合ステップS407のYesは、ユーザにより指定された平行ストロークの本数に基づいて他に発生させる平行ストロークはないか判断しステップS408、ある場合ステップS408のNoはストロークの取得ステップS404に戻る。他に発生させる平行ストロークはない場合ステップS408のYesは、次の処理に移行する。この時点では、図23aに示すように、平行ストロークは互いに正しくつながっておらず、折れ曲がりの内側では重複、外側ではストロークの断絶が発生している。そこで、その修正の処理を続行する。図22に戻り、同一のストローク群に属する平行ストローク例えば、図23aの一番上のストロークで隣接しているものを選びステップS409、その交点を求めるステップS410。次いで、求めた交点までストロークを短縮あるいは延長するステップS411。次いで、全ての組み合わせを吟味したか否か判断しステップS412、してない場合ステップS412のNoは隣接ストロークの選択ステップS409に戻る。全ての組み合わせを吟味した場合ステップS412のYesは、全てのストローク群を吟味したか否か判断しステップS413、していない場合ステップS413のNoはストローク群の取得ステップS403に戻る。全てのストローク群を吟味した場合ステップS413のYesは、処理を終了する。図24はグループ内の重複除去図18のステップS208の処理例を示すフローチャートである。図24において、処理を開始すると、1つのストローク群を取得するステップS501。次いで、そのストローク群の内部の2本のストロークを取得するステップS502。次いで、その2本のストローク間の最小距離を求めるステップS503。処理内容の詳細は後述する。次いで、求めた最小距離が線幅以下であるか否か判断するステップS504。最小距離が線幅以上である場合ステップS504のNoは、2本のストロークは重複しないので、次のストロークの組の判断に移行する。最小距離が線幅以下である場合ステップS504のYesは、2本のストロークは重複するとわかり、更に、それらが平行であるかどうかを判断するステップS505。平行である場合ステップS505のYesは、格納順が後のストロークに対して平行の場合のストローク分割等を行うステップS506。処理内容の詳細は後述する。平行でない場合ステップS505のNoは、格納順が後のストロークに対して非平行の場合のストローク分割等を行うステップS507。処理内容の詳細は後述する。ここで、平行の場合および平行でない場合の両者とも、格納順が後のストロークを分割等の対象とすることで、一つのストローク群内で重複する場合における複数のストロークの近接部分での寸断を防止することができる。最小距離が線幅以上である場合ステップS504のNoと、ストローク分割等ステップS506、S507の後、注目しているストローク群内の全てのストロークの組を吟味したか否か判断しステップS508、吟味していない場合ステップS508のNoはストロークの組の取得ステップS502に戻る。注目しているストローク群内の全てのストロークの組を吟味した場合ステップS508のYesは、全てのストローク群を吟味したか否か判断しステップS509、吟味していない場合ステップS509のNoはストローク群の取得ステップS501に戻り、吟味している場合ステップS509のYesは分割処理が行われたか否か判断するステップS510。分割処理が行われた場合ステップS510のYesは分割されたストロークを境に別グループに分割しステップS511、処理を終了する。分割処理が行われなかった場合ステップS510のNoはそのまま処理を終了する。図25はストローク間の最小距離を導出図24のステップS503の処理例を示すフローチャートである。図25において、処理を開始すると、距離を求める2本のストロークの端点が明らかに線幅以上であるか、すなわち、そのX座標同士、Y座標同士の差が線幅以上であるか否か判断するステップS601。明らかに線幅以上である場合ステップS601のYesは、2本のストロークは重複しないので、正確な距離を求めることなく、非常に大きな距離を設定しステップS602、処理を終了する。本処理の目的は、重複するかどうかの判定なので、線幅より遠い場合に計算は不要である。明らかに線幅以上でない場合ステップS601のNoは、両ストロークが平行かどうかを判断するステップS603。平行であるかどうかは、各ストロークの始点終点を通る直線の式の傾きを比較することで行うことができる。平行であればステップS603のYes、後段の処理を簡単にするために、両ストロークをX軸方向に平行になるように回転するステップS604。次いで、回転したストローク同士が、X方向に重なりがあるかどうかを見るステップS605。X方向に重なりがある場合ステップS605のYes、直線同士の距離Y方向の差異がストローク間距離の最小値なので、その値を距離として返しステップS606、処理を終了する。図26aに示すような場合が該当する。図25に戻り、X方向に重なりがある場合ステップS605のNo、端点同士の距離の最小値が、ストローク間距離の最小値なので、それを計算して返しステップS607、処理を終了する。図26bに示すような場合が該当する。図25に戻り、ストローク同士が平行でない場合ステップS603のNoは、両ストロークの交点を求め、交点がストローク内にあるか否か判断するステップS608。交点がストローク内に存在する場合ステップS608のYesは、距離を0として返しステップS609、処理を終了する。交点がストローク内に存在せず、その延長線上に存在する場合ステップS608のNoは、まず、端点間の距離の最小値αを求めるステップS610。次いで、ある端点から、他方のストロークを通る直線上に垂線を下ろすことを考え、その足の座標を求めるステップS611。次いで、垂線の足がストローク内にあるか否か判断するステップS612。足がストローク内にある場合ステップS612のYesは、足までの距離βを求めるステップS613。図27はα、βの例を示している。図25に戻り、足がストローク内にない場合ステップS612のNoはなにもしない。次いで、全ての端点について吟味したか判断しステップS614、まだである場合ステップS614のNoは垂線の足の導出ステップS611に戻る。全ての端点について吟味した場合ステップS614のYesは、α、βの最小値をストローク間距離の最小値として返しステップS615、処理を終了する。図28は平行の場合のストローク分割等図24のステップS506の処理例を示すフローチャートである。図28において、処理を開始すると、2本のストロークをX軸と平行になるように回転するステップS701。具体的には次のように処理を行う。先ず、X軸に対するそれぞれのストロークの回転角度を求める。回転角度に対するsin、cosをそれぞれsint、costとおき、ストロークの直線の式をaxbyc0とすると、sintasqrtcostbsqrtとなる。それぞれのストロークを逆方向に回してX軸と平行にするが、ストロークの端点の座標値をxsysとし、回転後のストローク端点の座標値をxs0ys0とおけば、xs0costxssintysys0sintxscostysとなる。次いで、端点間距離が線幅となるように、一方を短縮可能か判断するステップS702。具体的には次のように処理を行う。先ず、ストローク間の最短距離を求める。回転した2つのストロークの端点のX座標に重なりがあれば、最短距離は平行な線分間の距離である。また、重なりがなければ、各ストロークの端点間距離端点はそれぞれ2つずつあるから計4とおりの距離があるのうち、一番短いものがストローク間の最短距離となる。そして、最短距離が線幅tより小さい場合は、回転した2つのストロークの端点のX座標の重なり状態を吟味し、重ならない部分があれば一方を短縮可能と判断する。また、重ならない部分がなければ短い方のストロークを削除すると判断する。一方を短縮可能な場合ステップS702のYesは、短縮処理を行うステップS703。つまり、図29aに示すように、X方向にずれており、短縮してもストロークが消滅しないだけの長さが残る場合には、短縮処理を行う。分割対象のストローク上にあり、他方のストロークの端点からの距離がtである点を求めて、ここを分割対象のストロークの新たな端点とする。図28に戻り、短縮不可能な場合ステップS702のNoは、短いほうのストロークを削除するステップS704。つまり、図29bに示すような場合には、短い方のストロークは長い方のストロークとの重複なしでは存在できないので、短いほうのストロークを削除する。図28に戻り、次いで、削除したストロークの長さを算出して格納しておくステップS705。次いで、処理した結果のストロークを、前述したsint、costを利用して、最初の処理とは逆方向に回転してもとの向きに戻しステップS706、処理を終了する。図30は非平行の場合のストローク分割等図24のステップS507の処理例を示すフローチャートである。ストロークの分割等を行う場合のストロークの端点の位置算出にあたっては、図31に示すようにストローク同士の角度の考慮が必要である.図31aのような直交する場合は線幅分をカットすればよいので簡単であるが、図31bのように斜めに交叉している場合は角度を含めた考慮が必要である。なお、図31、図32に示すように、2本のストロークをストローク0、1と呼ぶこととし、ストローク1によりストローク0が分割短縮されると仮定して処理を行う。図30において、処理を開始すると、ストローク0上のストローク1からの距離が線幅tとなる点A0、B0の座標を取得するステップS801。具体的には次のように処理を行う。ストローク0分割対象の直線の式をa0xb0yc00とし、ストローク1参照の直線の式をa1xb1yc10とし、線幅をtとおく。また、ストローク0上の点で、ストローク1からの距離がtである点をPxpypとおく。Pはストローク0上の点であるからa0xpb0ypc001となる。A0からストローク1へおろした垂線の足までの長さがtであるから、点と直線の距離の公式により、2t22となる。式12を連立方程式として解くと、ストローク0、1は平行でないから、a1b0a0b1≠0となるので、となる。2組の解のうちの一方がA0、他方がB0である。次いで、点A0,B0からストローク1におろした垂線の足A1、B1を求めるステップS802。図32aはこの状態における例を示している。ストロークを直線で示し、描画される線幅の限界位置を破線で表現している。具体的には次のように処理を行う。垂線の足をQxqyqとおく。垂線の式をa2xb2yc20とおくと、これはストローク1と直交するから、b1xa1yc204と置き直せる。式4は点A0、B0を通るから、b1xpa1ypc20となるので、c2が求まり、式4は、b1xa1yb1xpa1yp05となる。垂線の式とストローク1の交点が垂線の足だから、式5とストローク1の連立方程式をxyについて解けば、それが垂線の足の座標xqyqである。よって、により求められる。図30に戻り、次いで、A1がストローク1の範囲内にあるか否か判断するステップS803。ストローク1の端点座標をx1sy1s、x1ey1eとおけば、この座標値の範囲内にxqyqがあれば、範囲内にあることになる。A1がストローク1の範囲内にあるならステップS803のYes、A0がストローク0の新たな端点となるステップS804。A1がストローク1の範囲内になければステップS803のNo、A0は新たな端点としては短縮しすぎである。そこで、ストローク1の端点から距離t線幅にある、ストローク0上の点A3を求めるステップS805。具体的には次のように処理を行う。ストローク1の端点の座標をHxhyhとおく。点A3の座標をxryrとおく。A3は分割対象ストロークであるストローク0上にあるから、a0xrb0yrc007となる。点A3とHの距離がtであるから、xrxh2yryh2t28となる。式78を連立方程式として解くとxryrを求めることができる。また、caa02b02cbb02xha0b0yha0c0ccb02xh2t2b0yhc02とおき、さらに、とおく。b0≠0のときとなり、求めたxrを使って、を得られる。b00のときa0≠0ゆえを得られる。そして、A3を分割されたストロークの新しい端点とするステップS806。図32bはこの状態における例を示している。図30に戻り、B側についても同様に処理を行って新しい端点を求めステップS807、削除したストローク長を求めステップS808、処理を終了する。図33は消滅可能性のあるストロークにマークを付与図18のステップS209の処理例を示すフローチャートである。図33において、処理を開始すると、ストローク群0、1として1つずつ選びステップS901、S902、ストローク群0、1から1つずつストロークを選びステップS903、両者のストロークに交点があるかどうか判断するステップS904。交点があるならステップS904のYes、交点座標と交叉角度を、ストローク群0に関連付けて交点配列交点列データに格納するステップS905、S906。交点がない場合ステップS904のNoはなにも行わない。次いで、全てのストロークの組み合わせについて吟味したか否か判断しステップS907、吟味していない場合ステップS907のNoはストロークの組の選択ステップS903に戻る。全てのストロークの組み合わせについて吟味した場合ステップS907のYesは、ストローク群1として全てのストローク群を吟味したか否か判断しステップS908、吟味していない場合ステップS908のNoは、ストローク群1の選択ステップS902に戻る。ストローク群1として全てのストローク群を吟味した場合ステップS908のYesは、取得したストローク群0の交点座標群を、ストローク群1の始点に近い順にソートするステップS909。次いで、隣接する交点間の距離を求めるステップS910。次いで、一つの交点間に注目し、その交点間の側にストローク1が存在するか否か判断するステップS911。図34aは、交点A、Bの真ん中にストローク1との交点Cが存在し、今、交点A、C間に注目しているとすると、ストローク1は左下に傾いているため、交点C、B間ではなく、交点A、C側に存在すると判断される。図33に戻り、注目する交点間の側にストローク1が存在する場合ステップS911のYesは、交点間距離に対し、交叉角度による補正を行うステップS912。図34aのような場合、交点Cとその脇にある別のストロークとの交点A、Bの距離はそれぞれ等しい。しかし、線には幅があるために、図34bのように交点A側の実質的な距離d1は反対側の交点B側の距離d2よりも実質的には小さいとみなされる。仮に距離d1が0になるとその間のストロークは消滅する可能性があるといえるので、角度による補正は重要である。もし、求める交点間距離が交点Aの側であれば、角度による補正を行う。元の距離から距離d3だけ差し引けばよいから、交叉角度をθ、線幅をtとすると、d3=t/2sinθとなる。図33に戻り、注目する交点間の側にストローク1が存在しない場合ステップS911のNoは、線幅の半分、すなわち、t/2だけ交点間距離から差し引くステップS913。図34bにおける交点C、B間についてはこの処理が行われる。図33に戻り、次いで、補正後の距離が線幅以下であるか否か判断するステップS914。もし距離が線幅以下となったらステップS914のYes、これら交点の両方でストローク0が分割された場合、この間にストロークは描画できない。従って、消滅可能性ありと判断してストローク群0にマークをつけるステップS915。線幅以下でない場合ステップS914のNoはマークを行わない。次いで、ストローク群0として全ての群を吟味したか否か判断しステップS916、吟味していない場合ステップS916のNoは最初の処理ステップS901に戻り、吟味した場合ステップS916のYesは処理を終了する。図35および図36はストローク群同士の重複除去図18のステップS210の処理例を示すフローチャートである。図35において、処理を開始すると、ストローク群0、1として別々のストローク群を選ぶステップS1001、S1002。次いで、ストローク群0、1から1つずつストロークを選ぶステップS1003。次いで、2つのストロークに重複部があるかどうか判定するステップS1004。重複があればステップS1004のYes、一方のストロークを短縮分割すると仮定して、削除長、残存ストロークをそれぞれ計算するステップS1005。この処理は、図24に示したものと同様になる。図35に戻り、重複がなければステップS1004のNo、上記の処理ステップS1005は行わない。次いで、ストローク群0,1に属する全てのストロークについて吟味したか否か判断しステップS1006、吟味していない場合ステップS1006のNoは、ストロークの組の選択ステップS1003に戻る。全てのストロークについて吟味した場合ステップS1006のYesは、一方のストローク群を短縮分割する場合の合計削除面積をそれぞれ算出するステップS1007。削除長に線幅をかけることによって合計削除面積が取得できる。次いで、一方のストローク群を短縮分割する場合に、注目するストローク群が完全に消える場合にはフラグtermに2を、先頭部が短縮される場合にはフラグtermに1を、その他はフラグtermに0を立てるステップS1008。次いで、ストローク群同士ストローク群0、1が重複しないか否か判断するステップS1009。重複しない場合ステップS1009のYesは以下の重複する場合の処理ステップS1010~S1015をスキップする。重複がある場合ステップS1009のNoは、一方のストローク群を短縮分割する場合の交点と消滅可能性のあるストロークにマークを付ける処理図33で得られた交点列を照合するステップS1010。次いで、ストロークが消滅する可能性がある交点で一致したらフラグvanishを立てるステップS1011。次いで、消滅可能性のあるストロークで既に分割が行われていたらフラグflagを立てるステップS1012。次いで、ストローク群が別のストローク群と重複し、その別のストローク群に消滅可能性があればフラグotherを立てるステップS1013。別のストローク群に消滅可能性があるか否かは、図33の処理により付されたマークの有無により判断する。次いで、図35に戻り、フラグ群からどちらのストローク群を短縮分割するかを選択するステップS1014。処理内容の詳細は後述する。次いで、選択されたストローク群のストロークを先に計算しておいたデータに基づき短縮分割するステップS1015。次いで、ストローク群1と異なるストローク群は全て吟味したか否か判断しステップS1016、吟味していない場合ステップS1016のNoはストローク群1の選択ステップS1002に戻る。全て吟味した場合ステップS1016のYesは、ストローク群0としてストローク群は全て吟味したか否か判断しステップS1017、吟味していない場合ステップS1017のNoは最初の処理ステップS1001に戻る。全て吟味した場合ステップS1017のYesは、再度の重複の判断および短縮の処理を行う。すなわち、わずかに他のストロークに接触していた場合に分割が発生した場合、それらの端点間の距離が線幅以下になる場合がある。こうした場合、ここに重複が残ることになるので、再度吟味し、短縮する。例えば、図37aに示すように、もともと上下にあるストローク群同士の重複を除去するに際し、下のストローク群を分割して図37bのようになった場合に、こんどは連続しなくなったストロークによって重複が発生している。このような場合は、下部のストロークをさらに短縮する必要がある。図36において、短縮分割の対象として選択されたストローク群から、ストローク0として1つのストロークを選びステップS1018、ストローク1としてストローク0と異なるストロークを選ぶステップS1019。次いで、2つのストロークが連続するか否か判断しステップS1020、連続しない場合ステップS1020のNoは、更に、端点間距離が線幅未満であるか否か判断するステップS1021。線幅未満である場合ステップS1021のYesは、ストローク1を短縮するステップS1022。ストロークが連続しない場合ステップS1020のYesと端点間距離が線幅未満でない場合ステップS1021のNoは、ストローク1の短縮ステップS1022は行わない。次いで、全てのストローク1について吟味したか否か判断しステップS1023、吟味していない場合ステップS1023のNoはストローク1の選択ステップS1019に戻る。全てのストローク1について吟味した場合ステップS1023のYesは、全てのストローク0について吟味したか否か判断しステップS1024、吟味していない場合ステップS1024のNoはストローク0の選択ステップS1018に戻る。全てのストローク0について吟味した場合ステップS1024のYesは処理を終了する。図38はフラグ群からどちらのストローク群を短縮分割するかを選択図35のステップS1014の処理例を示すフローチャートである。図38において、処理を開始すると、フラグtermから判断して、ストローク群1が残存し、ストローク群0のみ完全に消去され、1本のストロークも残らない場合ステップS1101のYesは、ストローク群1側を分割短縮するステップS1117。逆に、ストローク0が残存し、ストローク群1のみが完全に消去される場合ステップS1102のYesは、ストローク群0を分割短縮するステップS1116。ストローク群0のみが、群の端だけの短縮となる場合ステップS1103のYesは、ストローク群0を短縮するステップS1116。これは、分割よりも短縮の方が見栄えに影響が少ないためである。逆の場合ステップS1104は、ストローク群1を短縮するステップS1117。太文字の場合ステップS1105のYesは、ストローク群0の方が、中心部のストロークに近い場合ステップS1106のYesは、ストローク群1を分割短縮するステップS1117。これは、中心線を残したほうが見栄えが良いためである。図39は太文字の場合の描画例を示しており、aは中心線を残す配慮をしない場合、bは中心線を残す配慮をした場合である。図38に戻り、ストローク群1の方が、中心部のストロークに近い場合ステップS1107のYesは、ストローク0を分割、短縮するステップS1116。次いで、フラグvanishから判断して、ストローク群0のみが、一部消滅の可能性がある場合ステップS1108のYesは、ストローク群1を分割短縮するステップS1117。逆の場合ステップS1109のYesは、ストローク群0を分割短縮するステップS1116。両方のストローク群ともvanishによって消滅の可能性がある場合ステップS1110のYesは、フラグflagを使い、既に一部消滅につながる分割をしているかどうかを判断する。あるストローク群で隣り合う交点の距離が線幅より小さい場合、どちらか一方の交点で既に分割が行われている場合に相当する。仮に、もう一方でも分割が行われた場合、この交点間のストロークは消滅する。したがって、ストローク群0のみで既に分割が行われている場合ステップS1111のYesは、ストローク群1を分割短縮するステップS1117。逆の場合ステップS1112のYesは、ストローク群0を分割、短縮するステップS1116。次いで、フラグotherを使い、ストローク群0のみが、別のストロークと交わっており、その別のストロークに一部消滅の可能性がある場合ステップS1113のYesに、ストローク1を分割対象とするステップS1117。これは、別ストロークで消滅がおきないよう、ストローク0に分割短縮を行う余裕を残しておきたいためである。逆の場合ステップS1114のYesはストローク0を分割短縮するステップS1116。次いで、削除面積を比較し、ストローク群0の方が小さければステップS1115のYes、ストローク0を分割、短縮するステップS1116。そうでなければステップS1115のNo、ストローク1を短縮分割するステップS1117。図40は従来の問題点が改善された例を示す図である。すなわち、従来は図3bで説明したように、複数のストロークが接近する場合にストロークが寸断され、描画品質の低下を招いていた。しかし、本実施形態によれば、同じ文字について図40aに示すように、ストローク群間の重複除去により、ストローク群の単位で分割等が行われるため、複数のストロークが接近する部分でストロークが寸断されることがなくなり、描画品質の低下を防止することができる。また、図40bに示すように、文字αのような一つのストローク群内で重複部分が存在する場合については、ストローク群内の重複除去により、ストローク群内のストロークの配置順序から別のストローク群に属するのと同様に重複除去が行われ、複数のストロークが接近する部分でストロークが寸断されることがなくなり、描画品質の低下を防止することができる。<総括>以上説明したように、本実施形態によれば、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することができる。以上、本発明の好適な実施の形態により本発明を説明した。ここでは特定の具体例を示して本発明を説明したが、特許請求の範囲に定義された本発明の広範な趣旨および範囲から逸脱することなく、これら具体例に様々な修正および変更を加えることができることは明らかである。すなわち、具体例の詳細および添付の図面により本発明が限定されるものと解釈してはならない。"