第8回

prev slash top slash next

第8回:その他の関数と三角関数

その他の関数

前回の講座では弾を撃つ関数を作りました。
しかし、数学で習う関数[y=f(x)]とは違うように思えます。
[関数とは、引数に依存して定まる値、もしくは式である。]となっています。 ニコニコ大百科 関数
プログラムにおいての関数は、
「関数とは、ある値を与えると、何らかの値を返す処理のまとまり」
なのです。
帰ってきた値のことを、返り値(戻り値)といいます。

戻り値がある関数を作るには、[return]を使います。

return 戻り値;

returnを使うときには少し注意が必要です。
それは、returnを使うとそれ以降の関数の処理は打ち切られるということです。
returnは関数の一番最後に書かれることが多いので、あまり問題にはなりませんが、
覚えておくといいでしょう。

三角比

次はゲームにおいて非常に重要となる三角関数です。
中3の人は今のうちに基本をよく覚えておくといいでしょう。
基本を覚えていないと高2になった時に死ねます。

といっても基本ならそこまで難しくありません。
三角関数は高1のときは、「三角比」として習います。
三角比とは、その名のとおり三角形の辺の比のことで、
三角関数はそれを拡張したものです。

鋭角三角形の鋭角のひとつをθ(シータ)とし、斜辺の長さをr、
その他の辺の長さを図のようにx, yとするとき、
y/r, x/r, y/xの各値は、三角形の大きさに関係なく、
いずれも角θの大きさだけで決まります。
これらを、それぞれθの
正弦(sine,サイン),余弦(cosine,コサイン), 正接(tangent,タンジェント)
と言い、sinθ,cosθ,tanθと書きます。

img1

ここまではいいでしょうか、次は三角関数です。

三角関数

平面上で、点Oを中心に半直線OPを回転させるとき、
この半直線OPを動径といいます。
また、動径の最初の位置を示す半直線OXを始線といいます。

座標平面上で、右図のようにx軸の正の部分に始線をとり、
角θの動径と原点を中心とする
半径rの円との交点Pの座標を(x, y)とします。
このとき、y/r, x/r, y/xの値は
どれも円の半径rには関係なく、θだけで決まります。
そこで、三角比と同様に、sinθ=y/r, cosθ=x/r, tanθ=y/x
と定め、それぞれ一般角θの正弦,余弦,正接といいます。
これらはどれもθの関数であり、まとめてθの三角関数と言います。
半径が1のことを単位円といいます。
半径r=1とすると、sinθとcosθはそれぞれこう書き換えることが出来ます。
sinθ=y/1=y
cosθ=x/1=x

点Pは単位縁の周上にあるので、sinθとcosθの値のとる範囲は、
それぞれ-1≦sinθ≦1, -1≦cosθ≦1
となります。
教科書読んでも分からないのにこんな説明で分かる人がいるのか…?

img2

では、三角関数を使って数学的な関数を作ってみましょう。
今回は、sinとcosを使います。

function offsetX(radius, angle)
{
 return radius*cos(angle);
}
function offsetY(radius, angle)
{
 return radius*sin(angle);
}

この関数は、半径radiusと角度angleから、それぞれ円周上のx座標とy座標を返す関数です。
三角関数は半径と角度から円周上の点の座標を知ることが出来るのです。

早速、offsetXとoffsetYを使ってこれまでのスクリプトを少し変えてみましょう。

function AllroundShot(angle, color, way)
{
 loop(way)
 {
  let x = GetX + offsetX(30, angle);
  let y = GetY + offsetY(30, angle);

  CreateShot01(x, y, 2, angle, color, 10);
  angle+=360/way;
 }
}

これで、敵から30ドット離れたところから弾が発射されるようになります。
30の部分を大きくすれば敵から離れ、小さくすれば敵に近づきます。
0より小さく設定すると、中心に向かって弾が発射されるようになります。
出来るだけ0以上を指定するようにしましょう。

次回はマイクロスレッドやります。
これを使えば複雑なプログラムを簡潔に書くことが出来ます。


top
prev slash next
inserted by FC2 system