« HSPTV!メルマガ 第29号 | メイン | 【よみもの】こんなHSP3本が欲しいぞ~!のコーナー 1 »

2006年12月20日

【講座】「教えて!おにたま!!」

「方向転換」を作りたい!!と思っていざ作ろうとすると・・・
無理でした。いつも「マウスのいるところが正面」にする方法が
まったく思いつきません。
さらにgrotate命令の4番目のパラメータの角度指定も
いまいちわかりません。

<こたえ>

「教えて!おにたま!!」へのお便りありがとうございます(^^
画像を回転させたり、特定の方向に向かせるといった処理を
行なうためには、どうしても三角関数という要素が必要になって
きます。
三角関数と聞くとなんか難しそうに感じるかもしれませんが、
横方向(X)と縦方向(Y)の長さと、その角度をお互いに計算で
出すことができる便利な方法だと思って覚えてしまうのも手です。

HSP3で言うと、角度から長さを出すには、

横方向の長さ = sin(角度)
縦方向の長さ = cos(角度)

のように使います。(長さは-1.0から1.0の範囲で出てきます。)

逆に、長さから角度を割り出すには、

角度 = atan( 縦方向の長さ, 横方向の長さ )

となります。ここで使われる角度は、ラジアンという単位なので、
ちょっと馴染みにくいのですが、円周率(π)の値(3.14…)が
ちょうど180度になると思ってください。

grotate命令の4番目のパラメータには、このラジアンという
単位で角度を指定します。

以下のスクリプトは、マウスカーソルの方向を向かせる処理の
サンプルです。grect命令を使っていますが、角度の指定などは
grotate命令でも同じです。

screen 0,320,240
cx=160:cy=120 ; 中心のX,Y座標
repeat
redraw 0
dir=atan(cy-mousey,cx-mousex)
color 255,255,255:boxf
color 0,0,0:pos 0,0
mes "mouse=("+mousex+","+mousey+") dir="+dir
grect cx,cy,dir,100,100
redraw 1
await 20
loop

それでは、またまた。HSPに限らず、PCのコトや
プログラミング関係どんなことでもお便り待っています。

(おにたま)

投稿者 usuaji : 2006年12月20日 00:53

口臭チェッカー市場