(57)【要約】【課題】より簡単なロジックで、高速に、線が途切れることのないライン描画方法を提供する。【解決手段】始点と終点の座標値が入力されると、まず、それぞれの点が含まれるピクセルに設定されるダイアモンド枠内にあるか否かが判断される。そして、始点と終点で設定される線分の主軸を決め、ダイアモンド枠内か否か等によって決定される方法によって、始点と終点の位置を補正する。そして、補正後の線分の描画方向を判定し、補正前後で描画方向が同じか否かを判定する。描画方向が一致している場合にはピクセルを描画し、一致していない場合には、補正後の始点と終点の座標値の整数値を比較し、一致している場合はピクセルを描画し、一致していない場合には、非描画とする。【選択図】図２
2010009350.tif 000002
【特許請求の範囲】
【請求項１】
座標値で与えられたラインを、所定のルールに基づいてピクセルが配列された表示画面に描画するライン描画方法であって、
ラインの端点の座標値を、該端点が始点であるか、あるいは、終点であるか、および、所定枠内にあるか否かに基づいて補正し、
補正前のラインの始点から終点に向かう方向と、補正後のラインの始点から終点に向かう方向とが、左右方向、あるいは上下方向が一致しているか否かを判断し、
補正前後のラインの始点から終点に向かう方向が不一致の場合には、補正後の始点および終点の座標値の整数値が一致するか否かを判断し、
補正前後の始点から終点に向かう方向が一致している場合、および、該方向が不一致であり、かつ、該補正後の始点および終点の座標値の整数値が一致している場合に、ピクセルを描画する、
ことを特徴とするライン描画方法。
【請求項２】
ラインの始点と終点のＸ座標値の差分と、Ｙ座標値の差分の内、大きいほうの座標軸を主軸とし、他方の軸を副軸とし、終点の座標値について、所定枠内から枠外への線分が最後に所定枠と交差するピクセルの中心まで主軸座標を補正し、副軸座標を補正しないことを特徴とする請求項１に記載のライン描画方法。
【請求項３】
ラインの始点と終点のＸ座標値の差分と、Ｙ座標値の差分の内、大きいほうの座標軸を主軸とし、他方の軸を副軸とし、終点の座標値について、所定枠内から枠外への線分が最後に所定枠と交差するピクセルの中心まで、主軸座標を補正し、副軸座標値は、（主軸座標の移動距離）×ラインの傾き値を終点の副軸座標に加算して補正することを特徴とする請求項１に記載のライン描画方法。
【請求項４】
ラインの始点と終点のＸ座標値の差分と、Ｙ座標値の差分の内、大きいほうの座標軸を主軸とし、他方の軸を副軸とし、終点の座標値について、主軸座標と副軸座標を、所定枠内から枠外への線分が最後に所定枠と交差するピクセルの中心まで補正することを特徴とする請求項１に記載のライン描画方法。
【請求項５】
ラインの始点と終点のＸ座標値の差分と、Ｙ座標値の差分の内、大きいほうの座標軸を主軸とし、他方の軸を副軸とし、始点の座標値が所定枠外だった場合に、枠内から枠外への線分が最初に所定枠と交差するピクセル中心まで主軸座標を補正し、副軸座標値は、（主軸座標の移動距離）×ラインの傾き値を始点の副軸座標に加算して補正することを特徴とする請求項１に記載のライン描画方法。
【請求項６】
ラインの始点と終点のＸ座標値の差分と、Ｙ座標値の差分の内、大きいほうの座標軸を主軸とし、他方の軸を副軸とし、始点の座標値が所定枠外だった場合に、主軸座標と副軸座標を、枠内から枠外への線分が最初に所定枠と交差するピクセル中心まで補正することを特徴とする請求項１に記載のライン描画方法。
【請求項７】
ラインの始点と終点のＸ座標値の差分と、Ｙ座標値の差分の内、大きいほうの座標軸を主軸とし、他方の軸を副軸とし、始点の座標値が所定枠外だった場合に、枠内から枠外への線分が最初に所定枠と交差するピクセル中心まで主軸座標を補正し、副軸座標値は、補正しないことを特徴とする請求項１に記載のライン描画方法。
【請求項８】
前記所定のルールはダイヤモンド・イグジット・ルールであり、前記枠はダイヤモンド枠であることを特徴とする請求項１記載のライン描画方法。
【請求項９】
請求項１のライン描画方法を実行するグラフィックチップ。
【請求項１０】
請求項1のライン描画方法を実行するカーナビゲーションシステム。
【請求項１１】
座標値で与えられたラインを、所定ルールに基づいてピクセルが配列された表示画面に描画するライン描画装置であって、
ラインの端点の座標値を、該端点が始点であるか、あるいは、終点であるか、および、所定枠内にあるか否かに基づいて補正する補正手段と、
補正前のラインの始点から終点に向かう方向と、補正後のラインの始点から終点に向かう方向の正負が一致しているか否かを判断するライン方向判断手段と、
補正前後のラインの始点から終点に向かう方向が不一致の場合には、補正後の始点および終点の座標値の整数値が一致するか否かを判断する整数値判断手段と、
補正前後の始点から終点に向かう方向が一致している場合、および、該方向が不一致であり、かつ、該補正後の始点および終点の座標値の整数値が一致している場合に、ピクセルを描画する描画手段と、
を備えることを特徴とするライン描画装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ラインを画面に描画するライン描画方法に関する。
【背景技術】
【０００２】
座標値で与えられたラインを、ピクセルが配列された表示画面に描画するライン描画アルゴリズムの一つにDiamondExitRuleという方式がある。このアルゴリズムに則ってライン描画を行うと、連続するライン描画でもその接点を隙間なく接続させることができ、またピクセルの2度打ちも発生しない。従来では、DiamondExitRuleを使用しない場合には、線が途切れ途切れになることがあるので、ライン描画の際には、DiamondExitRuleを適用することが望ましい。
【０００３】
但し、このルールを適用する場合には、線長が1未満となるラインを描画する際に注意が必要である。これは、ラインの始点、終点の位置によってはラインを完全に消失させる(1ピクセルも描画しない)場合と、1ピクセルのみ描画する場合が存在するためである。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
DiamondExitRuleを適用した場合、線長1未満となる始点、終点の与え方について、考え得る全てのパターンについての描画判定を行う仕組みが必要となる。しかし、このすべてのパターンについて判断を行うロジックをデジタル回路で実装しようとすると、回路規模が大きくなり、また、処理も遅くなるので、より簡単なロジックで高速に線長１未満となるラインの描画の際にも適用できるDiamondExitRuleの実現方法が望まれる。
【０００５】
本ライン描画方法の課題は、より簡単なロジックで、高速に、線が途切れることのないライン描画方法を提供することである。
【課題を解決するための手段】
【０００６】
本ライン描画方法は、座標値で与えられたラインを、ダイアモンド・イグジット・ルールに基づいてピクセルが配列された表示画面に描画するライン描画方法であって、ラインの端点の座標値を、該端点が始点であるか、あるいは、終点であるか、および、ダイアモンド枠内にあるか否かに基づいて補正し、補正前のラインの始点から終点に向かう方向と、補正後のラインの始点から終点に向かう方向が一致しているか否かを判断し、補正前後のラインの始点から終点に向かう方向が不一致の場合には、補正後の始点および終点の座標値の整数値が一致するか否かを判断し、補正前後の始点から終点に向かう方向が一致している場合、および、該方向が不一致であり、かつ、該補正後の始点および終点の座標値の整数値が一致している場合に、ピクセルを描画する。
【発明の効果】
【０００７】
本ライン描画方法によれば、より簡単なロジックで、高速に、線が途切れることのないライン描画方法を提供することができる。
【発明を実施するための最良の形態】
【０００８】
本実施形態においては、ラインの始点、終点に対して端点補正を行い、補正後の描画方向を求める。補正前の描画方向と求めた補正後の描画方向が一致するならば「描画する(消失無し)」と判定し、描画方向と求めた補正後の描画方向が不一致する場合には、更に補正後の始点座標と終点座標の整数値を比較し（点の座標の整数値がピクセルの位置を示す）、整数値が一致した場合は「描画する(消失なし)」と判定し、整数値が不一致した場
合には「非描画(消失)」と判定する。
これにより、比較的容易に線長1未満のライン描画の判定を行うことができる。
【０００９】
図1に、本実施形態のライン描画方法を実行するライン描画装置のブロック構成図を示す。
図１の装置は、ハードウェアによって構成されるデジタル回路によって実現される。本実施形態においては、始点と終点に対するDiamondExitRule判定と端点補正を行うDiamond判定部１０、端点補正後の描画方向を算出する描画方向算出部１１、補正前後の描画方向をチェックする描画方向比較部１２、最終的にピクセルを描画するかどうかの判定を行う描画判定部１３から構成される。Diamond判定部１０は、始点Ｄ値演算部１４、終点Ｄ値演算部１５、主軸判定部１６、端点補正部１７、端点補正格納用レジスタ１８からなる。始点Ｄ値演算部１４は、始点の座標値から、始点がダイアモンド内にあるか否かの判断のための値（Ｄ値）を演算する。終点Ｄ値演算部１５は、終点がダイアモンド内になるか否かの判断のための値（Ｄ値）を演算する。主軸判定部１６は、始点と終点の座標値の差から、Ｘ座標の差とＹ座標の差のいずれが大きいかを判断し、大きいほうの座標値の軸（Ｘ軸あるいはＹ軸）を主軸として設定する。端点補正部１７は、始点主軸座標端点補正部、始点副軸座標端点補正部、終点主軸座標端点補正部、終点副軸座標端点補正部を備え、始点と終点の主軸座標と副軸座標（主軸ではないほうの座標軸の座標値）について、端点補正を行う。端点補正格納用レジスタ１８は、補正後の端点の座標値を格納する。
【００１０】
図２は、本実施形態の処理フローを示す図である。
Diamond判定部１０は、ラインの始点、終点に対して独立にDiamondExitRule適用して、端点補正を行う。始点と終点の座標値が入力されると（ステップＳ０）、ステップＳ１において、始点と終点のＤ値を演算する。Ｄ値の演算は、以下の式により行う。
【００１１】
Ｚ＝｜Ｘ１―Ｘ０｜＋｜Ｙ１−Ｙ０｜
Ｚ＜０．５の場合、ダイアモンド枠の中、Ｚ≧０．５の場合、ダイアモンド枠の外
ここで、（Ｘ１、Ｙ１）は、始点、あるいは、終点の座標値、（Ｘ０、Ｙ０）は、ピクセルの中心の座標値である。この式は、始点あるいは終点の座標位置がピクセル内のダイアモンド内にあるか否かを判断する式である。そして、主軸判定を行い、Ｘ軸が主軸の場合およびＹ軸が主軸の場合のそれぞれについて、始点と終点のＸ、Ｙ座標軸を補正する。
【００１２】
端点補正を行った後は、描画方向算出部１１にて補正後の描画方向を求めて、描画方向比較部１２に結果を送信する（ステップＳ３）。補正後の描画方向は、補正後の終点の主軸座標から補正後の始点の主軸座標を減算したものであり、減算結果が負ならば描画方向は「負」、正ならば描画方向は「正」とする。また、その逆でもよい(描画方向は、補正前と補正後とで演算方法を統一しておけばよい)。
【００１３】
描画方向比較部１２では、補正前の描画方向と補正後の描画方向の向きをチェックする（ステップＳ４）。比較結果は、描画判定部１３に送信する。尚、補正前の描画方向は、補正前の終点の主軸座標から補正前の始点の主軸座標を減算したものであり、減算結果が負ならば描画方向は「負」、正ならば描画方向は「正」としたものである。また、その逆でもよい(描画方向は、補正前と補正後とで演算方法を統一しておけばよい)。
【００１４】
描画判定部１３では、受信した描画方向比較結果が「一致」しているか否かを判断し（ステップＳ５）、Ｙｅｓであった場合は「1ピクセル描画」と判定する。また、受信した描画方向比較結果が「不一致」であった場合は、補正後の始点の主軸座標と補正後の終点の主軸座標の整数値を比較し（ステップＳ６）、比較結果が一致しているか否かを判断する（ステップＳ７）。判断の結果、それが同座標値であれば「1ピクセル描画」と判定し、異なれば「非描画」と判定する。
【００１５】
DiamondExitRuleについて説明する。
図３に、Diamond枠の定義を示す。
図３に示すようにDiamond枠を定義し、この点の集合を「Diamond枠」と考え、点の集合の内側をDiamond枠内、外側(枠上も含む)をDiamond枠外と定義する。Diamond枠の定義式は、
｜Ｘ１―Ｘ０｜＋｜Ｙ１−Ｙ０｜＝０．５
である。ここで、（Ｘ１、Ｙ１）は、始点、あるいは、終点の座標値、（Ｘ０、Ｙ０）は、ピクセルの中心の座標値である。
【００１６】
図４および図５に、DiamondExitRule適用例を示す。
DiamondExitRuleを適用した場合、Diamond枠と交差する枠内から枠外へ向かう線分があるピクセルを描画する。（１）の場合は、始点を含むピクセルは、始点がDiamond枠と交差しないため描画しない。終点を含むピクセルは、終点がDiamond枠と交差しないため描画しない。（２）の場合は、始点を含むピクセルは、Diamond枠と交差する枠内から枠外へ向かう線分があるため描画する。終点を含むピクセルは、Diamond枠と交差する枠内から枠外へ向かう線分がないため描画しない。（３）の場合は、始点を含むピクセルは、Diamond枠と交差する枠内から枠外へ向かう線分があるため描画する。終点を含むピクセルは、Diamond枠と交差する枠内から枠外へ向かう線分があるため描画する。
【００１７】
図５の例に示すように、丸で示された始点から四角で示される終点までの線分のうちの、上記のルールに合致したピクセルのみ描画を行う。
図６に、線長が1未満となる始点、終点の与え方の例と、それに対するDiamondExitRuleでの描画規定を示す。
【００１８】
この例では「左→右」への描画の例(11例)であるが、「右→左」、「上→下」、「下→上」の4方向の描画が考えられるため、少なくとも44通りは存在することになる。図６（ａ）〜図６（ｄ）に記載されている矢印のうち、実線で示された矢印が１ピクセル描画する場合であり、点線で示された矢印が非描画の場合である。
【００１９】
以上が、DiamondExitRuleに関する概要である。
次に、ライン描画の基本的な考え方を説明する。
図７は、ライン描画の基本的な考え方を説明する図である。
【００２０】
ライン描画を行う場合、ΔXとΔYの比較により以下のようにX主軸かY主軸かに分類する。
・X主軸：「ΔX ≧ ΔY」
・Y主軸：「ΔX ＜ ΔY」
※ΔX：終点X座標から始点X座標を引いた値の絶対値
※ΔY：終点Y座標から始点Y座標を引いた値の絶対値
図７（ａ）は、X主軸ライン、図７（ｂ）は、Y主軸ラインの例を示す。
【００２１】
図７に示すように、Y主軸ラインの場合にはY座標を主軸座標, X座標を副軸座標と定義し、X主軸ラインの場合にはX座標を主軸座標, Y座標を副軸座標として定義する。
以上が、ライン描画の基本的な考え方である。
【００２２】
図８〜図１７は、端点補正処理を説明する図である。
補正動作の基本的な考え方は、以下のとおりである。
始点については、指定された始点座標を含むピクセルも含めて、指定座標がDiamond枠外だった場合に限り、枠内から枠外への線分が最初にDiamond枠と交差するピクセルの中
心まで主軸座標を補正する。副軸座標は、主軸座標の移動距離×ラインの傾き値を始点副軸座標に加算して補正する。終点については、指定された終点座標を含むピクセルも含めて、枠内から枠外への線分が最後にDiamond枠と交差するピクセルの中心まで主軸座標を補正する。副軸座標は補正しない。
【００２３】
図８において、（１）の場合は、始点は、枠内から枠外への線分が最初にDiamond枠と交差するピクセルは、始点を含むピクセルの１つ先のピクセルであるため、１つ先のピクセルの中心まで主軸座標（図８のラインはＸ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標は、上記の補正動作に従い補正する。補正後の位置は、上向き三角形で示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルの１つ手前のピクセルであるため、１つ手前のピクセルの中心まで主軸座標（図８のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。補正結果は、下向き三角形で示されている。
【００２４】
（２）の場合は、始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠内であるため補正しない。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルの１つ手前のピクセルであるため、１つ手前のピクセルの中心まで主軸座標（図８のラインはＸ主軸であるため、主軸座標はＸ座標）を補正する。補正結果は、下向き三角形で示されている。
【００２５】
（３）の場合は、始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図８のラインはＸ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標は、上記の補正動作に従い補正する。結果、補正位置は、上向き三角の位置となる。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。しかし、終点は必ず補正を行うので、終点を含むピクセルの中心まで主軸座標（図８のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。結果は、下向き三角形で示されている。
【００２６】
図９は、端点の具体的補正例（その１）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図９のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標に対しては、主軸座標の移動距離×ラインの傾き値を始点の副軸座標に加算して補正する。結果は、上向き三角形によって示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。しかし、終点は、必ず補正を行うので、終点を含むピクセルの中心まで主軸座標（図９のラインは、Ｘ座標であるため、主軸座標はＸ座標）を補正する。副軸座標は補正しない。結果は、下向き三角形で示されている。
【００２７】
図１０は、端点の具体的補正例（その２）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１０のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標に対しては、主軸座標の移動距離×ラインの傾き値を始点の副軸座標に加算して補正する。結果は、上向き三角形で示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。そこで、終点を含むピクセルの中心まで主軸座標（図１０のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標は、同ピクセルの中心の位置に補正する。結果は、下向き三角形で示される。
【００２８】
図１１は、端点の具体的補正例（その３）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１１のラインはＸ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標に対しては、主軸座標の移動距離×ラインの傾き値を始点の副軸座標に加算して補正する。結果は、上向き三角形で示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。そこで、終点を含むピクセルの中心まで主軸座標（図１１のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標に対しては、主軸座標の移動距離×ラインの傾き値を終点の副軸座標に減算して補正する。結果は、下向きの三角形で示されている。
【００２９】
図１２は、端点の具体的補正例（その４）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１２のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標に対しても、同ピクセルの中心まで補正を行う。結果は、上向き三角形で示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。しかし、終点は必ず補正を行うので、終点を含むピクセルの中心まで主軸座標（図１２のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標は補正しない。結果は、下向き三角形で示される。
【００３０】
図１３は、端点の具体的補正例（その５）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１３のラインはＸ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標に対しても、同ピクセルの中心まで補正を行う。結果は、上向き三角形で示される。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。そこで、終点を含むピクセルの中心まで主軸座標（図１３のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標は、同ピクセルの中心の位置に補正する。結果は、下向き三角形で示されている。
【００３１】
図１４は、端点の具体的補正例（その６）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１４のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標に対しても、同ピクセルの中心まで補正を行う。結果は、上向き三角形で示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。そこで、終点を含むピクセルの中心まで主軸座標（図１４のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標に対しては、主軸座標の移動距離×ラインの傾き値を終点の副軸座標に減算して補正する。結果は、下向き三角形として示されている。
【００３２】
図１５は、端点の具体的補正例（その７）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１５のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標に対しては補正しない。結果は、上向き三角形として示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセ
ルである。しかし、終点は必ず補正を行うので、終点を含むピクセルの中心まで主軸座標（図１５のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標は補正しない。結果は、下向き三角形として示されている。
【００３３】
図１６は、端点の具体的補正例（その８）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１６のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標に対しては補正しない。結果は、上向き三角形として示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。そこで、終点を含むピクセルの中心まで主軸座標（図１６のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標は、同ピクセルの中心の位置に補正する。結果は、下向き三角形で示される。
【００３４】
図１７は、端点の具体的補正例（その９）である。
始点は、始点を含むピクセルが枠内から枠外への線分が最初にDiamond枠と交差するピクセルとなる。しかし、始点を含むピクセルで始点がDiamond枠外であるため、同ピクセルの中心まで主軸座標（図１７のラインは、Ｘ主軸であるため、主軸座標はＸ座標）を補正する。副軸座標に対しては、補正しない。結果は、上向き三角形として示されている。終点は、枠内から枠外への線分が最後にDiamond枠と交差するピクセルは終点を含むピクセルである。そこで、終点を含むピクセルの中心まで主軸座標（図１７のラインは、Ｘ主軸であるため、主軸座標は、Ｘ座標）を補正する。副軸座標に対しては、主軸座標の移動距離×ラインの傾き値を終点の副軸座標に減算して補正する。結果は、下向き三角形として示されている。
【００３５】
図１８〜図２３は、本実施形態に従った端点補正処理のフローチャートである。
図１８は、Ｘ主軸での始点Ｘ座標の端点補正例を説明する図である。図１８においては、以下の補正式を使う。
補正式Ａ：補正後  始点Ｘ座標ＡＸｓ＝int（Ｘｓ−PARAM）＋１．５
補正式Ｂ：補正後  始点Ｘ座標ＡＸｓ＝int（Ｘｓ−PARAM）＋０．５
補正式Ｃ：補正後  始点Ｘ座標ＡＸｓ＝int（Ｘｓ−PARAM）−０．５
補正式Ｄ：補正後  始点Ｘ座標ＡＸｓ＝int（Ｘｓ）−α
ここで、PARAM値は、以下のとおりとする。
Ｘｓ≧０：０
Ｘｓ＜０：１
また、αは、微小値であり、少数４桁で表現する場合には、２＾−１６［０．００６２５］である。また、intは、カッコ内の数値の整数部分をとることを意味する。
【００３６】
まず、ステップＳ１０において、Ｄ判定を行い、始点がDiamond枠内にあるか否かを判断する。ステップＳ１０の判断の結果、Diamond枠内であると判断された場合には、補正を行わず、描画方向算出へ進む。ステップＳ１０において、Diamond枠外であると判断された場合には、ステップＳ１１において、Ｘｓ＞Ｘ０（Ｘｓは、始点のＸ座標、Ｘ０は、始点の存在するピクセルの中心Ｘ座標）であるか否かを判断する。ステップＳ１１の判断がＮｏの場合には、ステップＳ１３において、描画方向を判断する。ステップＳ１３の判断で、描画方向が負と判断された場合には、補正式Ｃで補正する。描画方向が正と判断された場合には、補正式Ｂで補正する。ステップＳ１１の判断がＹｅｓの場合には、ステップＳ１２において、描画方向を判断する。ステップＳ１２の判断で、描画方向が負と判断された場合には、補正式Ｂで補正し、描画方向が正と判断された場合には、補正式Ａで補正する。ステップＳ１０の判断において、始点がDiamond枠上にあると判断された場合には、ステップＳ１４において、int（Ｘ０）＝Ｘｓであるか否かを判断する。ステップＳ
１４の判断がＹｅｓの場合には、補正式Ｄで補正し、ステップＳ１４の判断がＮｏの場合には、ステップＳ１５において、Ｘｓ≦Ｘ０であるか否かを判断する。ステップＳ１５の判断がＮｏの場合には、補正式Ｄで補正をする。ステップＳ１５の判断がＹｅｓの場合には、ステップＳ１６において、描画方向を判断する。ステップＳ１６の判断で、描画方向が負と判断された場合には、補正式Ｃで補正し、ステップＳ１６の判断で、描画方向が正と判断された場合には、補正式Ｂで補正を行う。補正後は、描画方向算出に進む。
【００３７】
図１９は、Ｘ主軸での始点Ｙ座標の端点補正例を説明する図である。図１９においては、以下の補正式を使用する。
補正式Ａ：補正後  始点Ｙ座標ＡＹｓ＝Ｙ０＋（｜Ｘ０−Ｘｓ｜×傾き）
ここで、Ｘ０、Ｘｓについては、図１８の場合と同じである。Ｙ０は、始点が含まれるピクセルの中心Ｙ座標である。
【００３８】
ステップＳ２０において、始点がDiamond枠内か否かを判断する。ステップＳ２０において、枠内であると判断された場合には、補正なしで、描画方向算出へ進む。ステップＳ２０で、枠外であると判断された場合には、補正式Ａで補正する。ステップＳ２０において、枠上であると判断された場合には、ステップＳ２１において、int（Ｘ０）＝Ｘｓであるか否かを判断する。ステップＳ２１の判断がＹｅｓの場合には、補正なしで、描画方向算出へ進む。ステップＳ２１の判断がＮｏの場合には、ステップＳ２２において、Ｘｓ≦Ｘ０であるか否かを判断する。ステップＳ２２の判断がＮｏの場合には、補正なし、Ｙｅｓの場合には、補正式Ａで補正する。これらの処理が終わると、描画方向算出へ進む。
【００３９】
図２０は、Ｘ主軸での終点Ｘ座標の端点補正例を説明する図である。図２０では、以下の補正式を使う。
補正式Ａ：補正後  終点Ｘ座標ＡＸｅ＝int（Ｘｅ−PARAM）＋１．５
補正式Ｂ：補正後  終点Ｘ座標ＡＸｅ＝int（Ｘｅ−PARAM）＋０．５
補正式Ｃ：補正後  終点Ｘ座標ＡＸｅ＝int（Ｘｅ−PARAM）−０．５
補正式Ｄ：補正後  終点Ｘ座標ＡＸｅ＝int（Ｘｅ−PARAM）−１．５
なお、PARAM値は、以下のとおりとする。
Ｘｅ≧０：０
Ｘｅ＜０：１
ステップＳ２５において、終点が、Diamond枠内になるか否かを判断する。ステップＳ２５の判断で、枠内であると判断された場合には、ステップＳ２６において、描画方向を判断する。ステップＳ２６の判断で、描画方向が負と判断された場合には、補正式Ａで補正し、正と判断された場合には、補正式Ｃで補正する。ステップＳ２５の判断で、終点が枠外であると判断された場合には、ステップＳ２７において、Ｘｅ＞Ｘ０か否かを判断する。ステップＳ２７の判断がＮｏの場合には、ステップＳ２９において、描画方向を判断する。描画方向が負と判断された場合には、補正式Ｂで補正し、描画方向が正と判断された場合には、補正式Ｃで補正を行う。ステップＳ２７の判断がＹｅｓの場合には、ステップＳ２８において、描画方向を判断する。ステップＳ２８の判断で、描画方向が負と判断された場合には、補正式Ａで補正し、描画方向が正と判断された場合には、補正式Ｂで補正する。ステップＳ２５の判断で、終点が枠上であると判断された場合には、ステップＳ３０において、int（Ｘ０）＝Ｘｅであるか否かを判断する。ステップＳ３０の判断がＹｅｓの場合には、ステップＳ３４において、描画方向を判断し、描画方向が負の場合には、補正式Ｂ、描画方向が正の場合には、補正式Ｄで補正する。ステップＳ３０の判断がＮｏの場合には、ステップＳ３１において、Ｘｅ≦Ｘ０であるか否かを判断する。ステップＳ３１の判断がＹｅｓの場合には、ステップＳ３２において、描画方向を判断する。ステップＳ３２の判断で、描画方向が負と判断された場合には、補正式Ｂで補正し、描画方向が正と判断された場合には、補正式Ｃで補正する。ステップＳ３１の判断がＮｏの場合には、ステップＳ３３において、描画方向を判断し、負の場合には、補正式Ａで、正の場合には、補正式Ｃで補正を行う。補正後は、描画方向算出処理へ進む。
【００４０】
図２１は、Ｙ主軸での始点のＹ座標の端点補正例を説明する図である。図２１においては、以下の式を使用する。
補正式Ａ：補正後  始点Ｙ座標ＡＹｓ＝int（Ｙｓ−PARAM）＋１．５
補正式Ｂ：補正後  始点Ｙ座標ＡＹｓ＝int（Ｙｓ−PARAM）＋０．５
補正式Ｃ：補正後  始点Ｙ座標ＡＹｓ＝int（Ｙｓ−PARAM）−０．５
ここで、PARAM値は、以下のとおりとする。
【００４１】
Ｙｓ≧０：０
Ｙｓ＜０：１
また、Ｙｓは、始点のＹ座標値。
【００４２】
ステップＳ４０において、始点がDiamond枠内か否かを判断する。ステップＳ４０の判断で、枠内と判断された場合には、補正をしないで、描画方向算出処理に進む。ステップＳ４０の判断において、枠外と判断された場合には、ステップＳ４１において、Ｙｓ≧Ｙ０（始点が属するピクセルの中心Ｙ座標）であるか否かが判断される。ステップＳ４１の判断がＮｏの場合には、ステップＳ４２において、描画方向を判断する。描画方向が負の場合には、補正式Ｃで補正し、描画方向が正の場合には、補正式Ｂで補正する。ステップＳ４１の判断がＹｅｓの場合には、ステップＳ４３において、描画方向を判断し、描画方向が負の場合には、補正式Ｂで、描画方向が正の場合には、補正式Ａで補正をする。ステップＳ４０の判断で、枠上と判断された場合には、ステップＳ４４において、Ｘｓ＜Ｘ０であるか否かを判断する。ステップＳ４４の判断がＹｅｓの場合には、ステップＳ４５において、Ｙｓ＜Ｙ０であるか否かを判断する。ステップＳ４５の判断がＮｏの場合には、ステップＳ４７において、描画方向を判断し、描画方向が負であるなら、補正式Ｂ、正ならば補正式Ａで補正する。ステップＳ４５の判断がＹｅｓの場合には、ステップＳ４６において、描画方向を判断する。ステップＳ４６の判断で、描画方向が正と判断された場合には、補正式Ｂ、負と判断された場合には、補正式Ｃで補正する。ステップＳ４４の判断がＮｏの場合には、ステップＳ４８において、Ｘｓ＝Ｘ０か否かを判断する。ステップＳ４８の判断がＮｏの場合には、補正なしで、描画方向算出処理に進む。ステップＳ４８の判断がＹｅｓの場合には、ステップＳ４９において、描画方向を判断する。ステップＳ４９で、描画方向が正と判断された場合には、補正式Ｂで、負と判断された場合には、補正式Ｃで補正する。補正後は、描画方向算出処理に進む。
【００４３】
図２２は、Ｙ主軸での始点のＸ座標の端点補正例を説明する図である。図２２においては、以下の式を補正に使う。
補正式Ａ：補正後  始点Ｘ座標ＡＸｓ＝Ｘ０＋（｜Ｙ０−Ｙｓ｜×傾き）
補正式Ｂ：補正後  始点Ｘ座標ＡＸｓ＝（Ｘ０＋（｜Ｙ０−Ｙｓ｜×傾き）−α
補正式Ｃ：補正後  始点Ｘ座標ＡＸｓ＝Ｘ０−α
ここで、αは、微小値であり、小数４桁で表現する場合は、２＾−１６［０．００６２５］である。
【００４４】
ステップＳ５０において、始点がDiamond枠内にあるか否かが判断される。ステップＳ５０において、枠内であると判断された場合には、補正なしで描画方向算出処理へ進む。ステップＳ５０において、枠外と判断された場合には、補正式Ａで補正する。ステップＳ５０において、枠上であると判断された場合には、ステップＳ５１において、Ｘ０≦Ｘｓであるか否かを判断する。ステップＳ５１の判断がＹｅｓの場合には、補正式Ｂで、ステップＳ５１の判断がＮｏの場合には、補正式Ｃで補正を行う。補正後は、描画方向算出処理に進む。
【００４５】
図２３は、Ｙ主軸での終点のＹ座標の端点補正例を説明する図である。図２３においては、以下の式を補正に使用する。
補正式Ａ：補正後  終点Ｙ座標ＡＹｅ＝int（Ｙｅ―PARAM）＋１．５
補正式Ｂ：補正後  終点Ｙ座標ＡＹｅ＝int（Ｙｅ−PARAM）＋０．５
補正式Ｃ：補正後  終点Ｙ座標ＡＹｅ＝int（Ｙｅ−PARAM）−０．５
PARAM値は、以下のとおりとする。
Ｙｅ≧０：０
Ｙｅ＜０：１
【００４６】
ステップＳ５５において、終点がDiamond枠内か否かが判断される。枠内であると判断された場合には、ステップＳ５６において、描画方向が判断される。描画方向が負と判断された場合には、補正式Ａで、正と判断された場合には、補正式Ｃで補正する。ステップＳ５５において、枠外であると判断された場合には、ステップＳ５７において、Ｙｅ≧Ｙ０か否かが判断される。ステップＳ５７の判断がＮｏの場合には、ステップＳ５９において、描画方向が判断される。描画方向が正の場合には、補正式Ｃで、負の場合には、補正式Ｂで補正する。ステップＳ５７の判断がＹｅｓの場合には、ステップＳ５８において、描画方向を判断する。描画方向が正の場合には、補正式Ｂで、負の場合には、補正式Ａで補正する。ステップＳ５５の判断で、枠上であると判断された場合には、ステップＳ６０において、int（Ｘ０）＝Ｘｅか否かを判断する。ステップＳ６０の判断がＹｅｓの場合には、ステップＳ６１において、描画方向を判断し、描画方向が負の場合には、補正式Ａで、正の場合には、補正式Ｃで補正する。ステップＳ６０の判断がＮｏの場合には、ステップＳ６２において、Ｘｅ＝Ｘ０であるか否かを判断する。ステップＳ６２の判断がＹｅｓの場合には、ステップＳ６８において、描画方向が判断される。描画方向が負の場合には、補正式Ｂで、正の場合には、補正式Ｃで補正を行う。ステップＳ６２の判断がＮｏの場合には、ステップＳ６３において、Ｘｅ＜Ｘ０であるか否かが判断される。ステップＳ６３の判断がＮｏの場合には、ステップＳ６７において、描画方向を判断し、描画方向が負の場合には、補正式Ａで、正の場合には、補正式Ｃで補正を行う。ステップＳ６３の判断がＹｅｓの場合には、ステップＳ６４において、Ｙｅ＜Ｙ０であるか否かを判断する。ステップＳ６４の判断がＮｏの場合には、ステップＳ６５において、描画方向を判断し、描画方向が負の場合には、補正式Ａで、正の場合には、補正式Ｂで補正する。ステップＳ６４の判断がＹｅｓの場合には、ステップＳ６６において、描画方向を判断する。描画方向が負の場合には、補正式Ｂで、正の場合には、補正式Ｃで補正をする。補正後は、描画方向算出に進む。
【００４７】
図２４および図２５は、描画方向判定処理について説明する図である。
図２４および図２５では、主軸は、Ｘ軸であるとして説明する。図２４（ａ）は、端点補正前と後の描画方向が一致する場合を示している。ピクセルＡ内の始点からピクセルＢ内の終点まで線が引かれており、ピクセルＡを描画するのか、ピクセルＢも描画するのかの判定が必要となる。ここでは、Ｘ主軸ラインであるため、主軸座標は、Ｘ座標である。始点は主軸座標、副軸座標を補正する。終点は、主軸座標を補正する。補正後は、始点も終点もピクセルＡ内に入るので、ピクセルＢは描画せず、ピクセルＡを描画するか否かが問題となる。このとき、描画方向の補正前と後の判定を行う。補正前の描画方向は、正であり（右向きを正とする）、補正後の描画方向は、やはり正であるので、この場合は、補正前と後で描画方向が一致しており、ピクセルＡを描画することが判定される。
【００４８】
図２４（ｂ）は、補正前後の描画方向が不一致となる場合を示している。この場合、Ｘ主軸ラインであるため、主軸座標はＸ座標である。前述の端点補正の処理により、図２４（ｂ）の場合、始点は補正しない。終点は、主軸座標を補正する。補正前の描画方向は正、補正後の描画方向は負となるので、描画方向の不一致を検出することになる。次に、補正後の始点と終点のＸ座標値の整数値（同じ整数値ならば同じピクセル内にいることが示される）を比較する。補正後の主軸座標の整数値は等しいので、この場合は、ピクセルＡを描画すると判定する。
【００４９】
図２５は、非描画の場合の判定処理を示す図である。Ｘ主軸ラインであるため、主軸座標は、Ｘ座標である。始点は主軸座標（Ｘ座標）、副軸座標（Ｙ座標）を補正する。終点は、主軸座標を補正する。補正前の描画方向は正、補正後の描画方向は負となるので描画方向の不一致を検出する。次に、補正後の主軸座標の整数値は不一致なので、この場合は、ピクセルＡ、Ｂとも非描画と判定する。
【００５０】
図２６および図２７に、本実施形態のライン描画方法を実現する装置のブロック構成図を示す。
図２６は、カーナビゲーションシステム等のグラフィックチップの構成である。描画装置２２は、プログラマブルシェーダー２１のプログラム内容にしたがって、描画を行う。この際、バス２０で接続された、メモリコントローラ２７、キャプチャコントローラ２６から得られた描画データを取得し、処理して表示データを得てから、ディスプレイコントローラ２５に表示データを送って、表示を行わせる。描画装置２２は、外部と通信を行うため、ホストインタフェース２３を解して、外部インタフェース２４に接続される。
【００５１】
図２７は、図２６の描画装置２２の内部構成ブロック図である。描画装置２２に頂点データが入力されると、頂点処理部３０において、頂点の座標が計算される。頂点の座標は、図形セットアップ部３１に入力され、どのピクセルを描画するかが計算される。図形セットアップ部３１は、triangle  setup部とline  setup部からなり、それぞれ、三角形と線分を処理する。上記実施形態は、line  setup部に適用され、この内部は、図１に示されるとおりである。ピクセル描画データが得られると、これを描画処理部３２に送り、外部メモリ（画像メモリ等）に送って、表示を行わせる。
【００５２】
以上の実施形態は、線長１以上の線分にも同様に適用できるが、特に、４４通り程ある線長１未満の描画パターンを検出する方法について、その全ての描画パターンを比較的容易に検出することができ、これによりDiamondExitRule上での線長１未満の描画を確実に実現できる。
【００５３】
図２８〜図３３は、本実施形態と従来の技術と比較例を示す図である。
図２８に、従来技術におけるDiamondExitRule非適用の場合の描画の様子を、図２９に本実施形態におけるDiamondExitRule適用の場合の描画の様子を示す。これは2つの円を短い線分(線長1未満を含む)の集まりで描画した例である。従来技術では、円の一部分が途切れて表示されなくなっている部分が散発的に生じているが、本実施形態によれば、きれいな円が描画されていることがわかる。
【００５４】
図３０、および、図３１は、それぞれ、図２８および図２９の丸で囲まれた部分を拡大したものである。図３２は、図３０と図３１との差分を図示したものである。これらによれば、従来技術で描画されなかったピクセルが本実施形態で描画され、線の途切れがなくなっていることがわかる。
また、図３３に、本実施形態に従った、図２９の最初の部分のラインに関する座標指定の具体例を示す。表１は、座標値の具体例であり、表２〜４は、端点補正の方法のさまざまな組み合わせを示している。表５、６は、描画方向の判定結果を示す図である。そして、これらの表に示される演算の結果を示したのが、図３３である。
【００５５】
【表１】
2010009350.tif 000003
【００５６】
【表２】
2010009350.tif 000004
【００５７】
【表３】
2010009350.tif 000005
【００５８】
【表４】
2010009350.tif 000006
【００５９】
【表５】
2010009350.tif 000007
【００６０】
【表６】
2010009350.tif 000008
なお、表において、＊．５の位置というのは、ピクセルの中心の座標位置という意味である。
【図面の簡単な説明】
【００６１】
【図１】本実施形態のライン描画方法を実行するライン描画装置のブロック構成図である。
【図２】本実施形態の処理フローを示す図である。
【図３】Diamond枠の定義を示す図である。
【図４】DiamondExitRule適用例（その１）である。
【図５】DiamondExitRule適用例（その２）である。
【図６】線長が1未満となる始点、終点の与え方の例と、それに対するDiamondExitRuleでの描画規定を示す図である。
【図７】ライン描画の基本的な考え方を説明する図である。
【図８】端点補正処理を説明する図（その１）である。
【図９】端点補正処理を説明する図（その２）である。
【図１０】端点補正処理を説明する図（その３）である。
【図１１】端点補正処理を説明する図（その４）である。
【図１２】端点補正処理を説明する図（その５）である。
【図１３】端点補正処理を説明する図（その６）である。
【図１４】端点補正処理を説明する図（その７）である。
【図１５】端点補正処理を説明する図（その８）である。
【図１６】端点補正処理を説明する図（その９）である。
【図１７】端点補正処理を説明する図（その１０）である。
【図１８】本実施形態に従った端点補正処理のフローチャート（その１）である。
【図１９】本実施形態に従った端点補正処理のフローチャート（その２）である。
【図２０】本実施形態に従った端点補正処理のフローチャート（その３）である。
【図２１】本実施形態に従った端点補正処理のフローチャート（その４）である。
【図２２】本実施形態に従った端点補正処理のフローチャート（その５）である。
【図２３】本実施形態に従った端点補正処理のフローチャート（その６）である。
【図２４】描画方向判定処理について説明する図（その１）である。
【図２５】描画方向判定処理について説明する図（その２）である。
【図２６】本実施形態のライン描画方法を実現する装置のブロック構成図（その１）である。
【図２７】本実施形態のライン描画方法を実現する装置のブロック構成図（その２）である。
【図２８】本実施形態と従来の技術と比較例を示す図（その１）である。
【図２９】本実施形態と従来の技術と比較例を示す図（その２）である。
【図３０】本実施形態と従来の技術と比較例を示す図（その３）である。
【図３１】本実施形態と従来の技術と比較例を示す図（その４）である。
【図３２】本実施形態と従来の技術と比較例を示す図（その５）である。
【図３３】本実施形態と従来の技術と比較例を示す図（その６）である。
【符号の説明】
【００６２】
１０      Diamond判定部
１１      描画方向算出部
１２      描画方向比較部
１３      描画判定部
１４      始点Ｄ値演算部
１５      終点Ｄ値演算部
１６      主軸判定部
１７      端点補正部
１８      端点補正格納用レジスタ
２０      バス
２１      プログラマブルシェーダー
２２      描画装置
２３      ホストインタフェース
２４      外部インタフェース
２５      ディスプレイコントローラ
２６      キャプチャコントローラ
２７      メモリコントローラ
３０      頂点処理部
３１      図形セットアップ部
３２      描画処理部
【図１】
2010009350.tif 000009
【図６】
2010009350.tif 000010
【図１９】
2010009350.tif 000011
【図２６】
2010009350.tif 000012
【図３２】
2010009350.tif 000013
【図２】
2010009350.tif 000014
【図３】
2010009350.tif 000015
【図４】
2010009350.tif 000016
【図５】
2010009350.tif 000017
【図７】
2010009350.tif 000018
【図８】
2010009350.tif 000019
【図９】
2010009350.tif 000020
【図１０】
2010009350.tif 000021
【図１１】
2010009350.tif 000022
【図１２】
2010009350.tif 000023
【図１３】
2010009350.tif 000024
【図１４】
2010009350.tif 000025
【図１５】
2010009350.tif 000026
【図１６】
2010009350.tif 000027
【図１７】
2010009350.tif 000028
【図１８】
2010009350.tif 000029
【図２０】
2010009350.tif 000030
【図２１】
2010009350.tif 000031
【図２２】
2010009350.tif 000032
【図２３】
2010009350.tif 000033
【図２４】
2010009350.tif 000034
【図２５】
2010009350.tif 000035
【図２７】
2010009350.tif 000036
【図２８】
2010009350.tif 000037
【図２９】
2010009350.tif 000038
【図３０】
2010009350.tif 000039
【図３１】
2010009350.tif 000040
【図３３】
2010009350.tif 000041
【手続補正書】
【提出日】平成21年5月18日(2009.5.18)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００６０
【補正方法】変更
【補正の内容】
【００６０】
【表６】
2010009350.tif 000042
なお、表において、＊．５の位置というのは、ピクセルの中心の座標位置という意味である。
【手続補正書】
【提出日】平成21年6月8日(2009.6.8)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００６０
【補正方法】変更
【補正の内容】
【００６０】
【表６】
2010009350.tif 000043
なお、表において、＊．５の位置というのは、ピクセルの中心の座標位置という意味である。