画像ファイルを使ったline文

 画像ファイルに線の絵を用意しておき、それを角度をつけてコピーすることで任意の2点間に線を引きます。line命令がないプラグインを使っている場合や、line命令はあるが太さが指定できない場合に役に立つと思います。

人型の多関節キャラ

 1.任意の2点間に線を引く

線の画像

 図のような長い線を描いた画像ファイルを用意します。横でもいいですし、縦でもいいです。ここでは横の線とします。今、点(x1 , y1)と(x2 , y2)の間に線を引きたいとします。2点間の距離は
  length=√((x2-x1)^2+(y2-y1)^2)
です。(x1 , y1)から見た(x2 , y2)の角度は
  angle=atan((y2-y1)/(x2-x1))
です。2点の中心座標は
  cx=(x1+x2)/2
  cy=(y1+y2)/2
です。あとは、lengthの長さ分切り取ってangleの角度に傾けてコピーするだけです。

 2.任意の2点間に線を引く(その2)

「たかが線を引くためにそんな幅の広いファイルを用意するのは嫌だ」という方のために、上の方法を改良します。画面のサイズを640*480とすると、最長で√(640^2+480^2)=800ドットの線を引くことになります。場合によっては画面の幅より広い画像ファイルを使えないこともあるでしょう。

 そこで、例えば長さ64ドットの線の画像を用意しておいて、線を64ドットごとに区切って描くことにします。線の長さが64の倍数ならこれでいいですが、そうでない場合を考えて、最後は必要な長さだけ切り取ってコピーします。
(1)tx=x1 , ty=y1とします。
(2)(tx , ty)と(x2 , y2)の距離が64以下であれば(tx , ty)から(x2 , y2)に線を引いて終わりです。
(3)そうでないなら(tx , ty)から角度angleの方向に64ドット離れた座標に線を引き、その座標を新たに(tx , ty)とし、(2)に戻ります。

 なお、小数点以下を切り捨てる関係でごくわずかな誤差があるため、角度によっては64ドットごとの線分の間に隙間ができてしまうことがあります。ですから、実際には64ドットよりも少しだけ長い線の画像(66ドットとか)を用意しておいて、線分同士が重なり合うようにするといいと思います。

 3.太い線

 この方法の利点は、幅2ドット以上の線も引けるということです。好きな太さの線の画像を用意しておいて、それをコピーすればいいです。しかし、連続で直線を引く場合、線が細ければ目立ちませんが、太いと下図のようにつなぎ目が汚くなってしまいます。そういう場合、線の幅と同じ直径の円の絵を用意しておいて、つなぎ目に描くとなめらかに見えるかと思います。

なめらかな線


[サンプルプログラムをダウンロード] (HSP Ver2.61+hspext.dll+hmm.dll用)
[サンプルプログラムをダウンロード] (HSP Ver3用)
 敵が反射レーザーを撃ちます。

[目次へ][前へ][次へ] inserted by FC2 system