みなさんは三角関数を知っていますか?説明書を見ても「何のこと言ってんだかさっぱりわからん」「そんなことよりオナニーしようぜ」
という人もいるんじゃないかと思います。でも、そこで射精しないでください。更に高度なプログラムを作りたいと思っている初心者、中級者の皆さん、このページを読めば三角関数が使えるようになる(はずです!)
ということで、三角関数についてざっくばらんではありますが、解説しようという趣旨のページをつくりました。
是非活用してください。
これは、高校の数学で習うやつです。よくcosθ(コサインシータ)とか聞きますよね。
聞いたことないですか?大丈夫です。このページを何度も読めばわかるはずです。
三角関数とは、角度やx,yの移動量の関係を求める関数です。*1「関数」というという名前の通りある値に対して違う数値を出してくれます。
使い方としては、スプライトで弾を四方八方に発射させたり、キャラを動かしたり
時計やメーターで針を書くのに使ったりもします。
記述の方法は式の中に挿入する形で書きます。参考プログラムを参考にしてください。
これを使えるようになるととても便利です。本格シューティングゲームなんかも作れるんじゃないでしょうか。
プチコンでの三角関数に関係する関数は以下の種類があります。
PI(パイ)関数
RAD(ラジアン)関数
DEG(デグリー)関数
COS(コサイン)関数
SIN(サイン)関数
TAN(タンジェント)関数
ATAN(アークタンジェント)関数
今載っていない項目の加筆者募集中!!
そのまんまです。中学で習うπの値(円周率)(3.14159265358979323846264338....)を返してくれます。
でもプチコンは小数の精度が悪いので実際3.141ぐらいまでしか出してくれません。
しかし、実はその下の「3.1415」付近までプチコンの内部では記録されています。
ちなみに変態に3.14159265・・・を代入しても、「3.1415」を代入したときや、「PI()」を代入したときとまったく同じです。
ただし、「3.141」を代入した時とは違うので注意です
使用例です。
- CLS
- P=PI()
- R=4
- S=P*R*R
- L=P*R*2
- PRINT”ハンケイ4cmノエンノメンセキ”;S;”cm2
- PRINT”ハンケイ4cmノエンノエンシュウ”;L;”cm
この関数は角度(degree)とラジアン(radian)の変換をする関数です。
ラジアン数とは円周上でその円の半径と同じ長さの弧を切り取る2本の半径が成す角の値(wikipediaより)らしいですが、うーむわかりづらいですね。
まあ角度の単位の一つだと思ってください。
ちなみに180°= π rad
1 rad=57.29577951°
です。
使い方は、
角度→ラジアン:RAD(角度0~360)
ラジアン→角度:DEG(0~2π)
です。*2
2013/12/06追記
RAD関数では小数点以下の数値は無視されてしまうようです。小数点以下の数値も使う場合はPI()を用いて計算で求めてください。
この関数は角度から移動量を求めることができる関数です。
この関数に角度を渡すと
COS関数ならXの移動量
SIN関数ならYの移動量
を返します。
引数には角度をラジアン数で表します。
ラジアンの求め方
ラジアン=RAD(角度0~360)
で求められます。
注意:0度は右方向でそこから時計回りになっています。90度で真下になります。
この関数を使って斜め線を引くと直線と距離を合わせることができます。
- GPAGE 0
- GCLS
- CX=0:CY=0
- LX1=CX+50:LY1=CY
- LX2=CX+COS(RAD(40))*50
- LY2=CY+SIN(RAD(40))*50
- GLINE CX,CY,LX1,LY1,2
- GLINE CX,CY,LX2,LY2,2
図解です
関数自体の返す値は小さい(0~1)ので実際にプログラムに使うときは掛けて大きくして使用します。
参考プログラムその1
・入力した角度にキャラが動く
+ | プログラムリスト |
|
入力した角度通りにキャラクタを移動させます。この移動に三角関数を使っています。
ここで三角関数を使うとどの角度に動かしても同じ長さだけ動かすことができます。
これを使いこなせばかなり多用できると思います。
例えば弾を四方八方に打ち出すときにこの関数を使うと放射状に綺麗に広がります。
参考プログラムその2
+ | プログラムリスト |
|
ぐるぐると弾を打ち出すプログラムです。綺麗に弾が移動しているのが分かると思います。
この関数は他にもメーターを描くときなどに使用できます。
まあ、習うより慣れろって感じですね。自分でプチコンいじって頑張って見てください。
例えばサンプルプログラムのバイオリズムとか、ゲーム3のSIMPLE STGとか、色々あるよ。公式のプログラムは解説付きなのできっと味方になります。
波形について利用法などを書きます。
COS,SIN関数を使うとなだらかな波形を描くことができます。
波形は360°で1周期となります。よって
360/周期の長さ とすることで自由な周期の波形を描くことができます。
サンプルプログラム
+ | プログラムリスト |
|
タッチで1周期の長さを変えることができます。ちなみにCOS関数を使うとちょうど90度分ずれることになります。
これの応用として、サンプルプログラムのバイオリズムがあります。周期がそれぞれ違っているのが見てわかると思います。
こちらの内容は当熟女セクシーシーン集からいただいています。
三角関数を使うと原点から同じ距離の点を求められるのでその点同士を結ぶことで円ができます。更に、COS,SIN関数の掛ける値を変えることで楕円をかくことができます。
サンプルプログラム
+ | プログラムリスト |
|
FORループ内にWAITを入れるとどういうふうに書いているのかわかると思います。
この関数は傾きを返すための関数です。
「傾き」ってわかりますか?中学生の時に習いましたよね。(まだ中学生じゃない人もいるかも・・・)
そんな人のためにグラフを用意しました~。
はい、わかりましたか?まあいいんです。なんとなくわかれば。
なんか中学校の授業っぽいですね。まあグラフは学校でもプログラムでも重要ですし。
話がそれました。閑話休題。
さてTANはどのようになるのか。ここまで説明したように下の図のようになります。
わかりましたでしょうか?つまりsin(yの変化)のcos(xの変化)に対する比=直線の傾きということです。なので90°、270°の時は0で割ることになるので値が出ませんね。
この関数は他のと名前が少し違いますね。アーク+タンジェントです。
じつはこの種類、他にもアークコサイン、アークサインがあります。
つまり他の関数と対になっていて逆三角関数とも言われますが、どうなっているのでしょう。
この関数はいままでの関数と逆の働きをします。
これまでの関数はすべて角度がわかっていました。しか~し。やはりプログラムの中でXとYの変化はわかったけど角度がわからん。なんてシチュエーションもあるでしょう、その時はこの関数を使います。
使い方は
角度のラジアン数=ATAN(yの移動量÷xの移動量)
または
角度のラジアン数=ATAN(yの移動量,xの移動量)
で求められます。
この引数が1つの書き方と2つの書き方では結果が少々異なります。
上の図で考えてみましょう。Xが80増えてYが40増えているから引数が1つの書き方で書いてみるとこうなります。
- ?ATAN(40/80)
- 0.464
- OK
では、Xが80減ってYが40減っているときはどうでしょう?
- ?ATAN(−40/−80)
- 0.464
- OK
道程卒業になってしまいました。どちらも引数に0.5を渡しているだけなので当然ですね。
では引数が2つの書き方(巷ではATAN2とも呼ばれています)を見てみましょう。
- ?ATAN(40,80)
- 0.464
- OK
- ?ATAN(−40,−80)
- −2.678
- OK
この2つの差は3.142となり、丁度π(180°)逆を向いていることがわかります。
つまり、線の向きを気にしない時は引数が1つ、気にする時は引数が2つの書き方がおすすめです。
また、Xの変化量が0になるかもしれない時も引数が2つの書き方の方がおすすめです。(0除算のエラーが発生しません)
ATANの返す値の範囲は以下の範囲になります。
引数 | 範囲 | |
ラジアン | デグリー | |
1つ | -π/2 ~ π/2 | -90°~ 90° |
2つ | -π ~ π | -180°~ 180° |
サンプルプログラム
+ | プログラムリスト |
|
プレイヤーとターゲットの角度を測り、30°以上であれば旋回してターゲットに向かいます。公式サンプルプログラムのGAME4のミサイルなどはこの関数を使っています。つまり追尾ができるということです。
関係ないことを書き込んだ場合削除します。あしからず。
*1
まあそれだけじゃありませんけど
*2
ラジアン=角度*PI()/180 , 角度=ラジアン/PI()*180でも求められますが、精度に不安があるためおすすめしません。
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.180 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:00 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30