コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
KNTK ◆.O1reuuyjCCS
2018/8/23 16:05
質問
アークタンジェント?
シューティングゲームとかの自機狙い弾を作るためには、
ATAN()を使うという噂を聞きました。
何となく使えていますがそもそもATANが何を意味するのか、
なぜ自機狙いになるのかがよく分かりません。
教えてください!(ちなみに中学生)

コメント

アバター
こういち 2018/8/23 16:18 ◆ou0jbJnEJ0Kb
あーたんは角度から傾きを求める関数tan()の逆関数(関数の引数と戻り値を入れ換えたもの)です。つまり傾きから角度を求める関数です。
傾きは(yの変化量)/(xの変化量)なので(以下Δy/Δxと表記)、
ATAN((自機のy-敵のy)/(自機のx-敵のx))で、敵と自機の角度が求まります。
アバター
こういち 2018/8/23 16:21 ◆ou0jbJnEJ0Kb
ただ、-Δy/Δxと、Δx/-Δyの値は同じなので、
ATAN(Δy/Δx)だと、-PI()/2〜PI()/2の値しか返してくれません。(単位はラジアン)
さらにΔxが0だとゼロ除算エラーが出ます。
なので、その問題を解決するために/を,に置き換えて、ATAN(Δy,Δx)という書き方が登場したという感じです。
アバター
こういち 2018/8/23 16:28 ◆ou0jbJnEJ0Kb
で、あとはあーたんで求めた角度をcos()とsin()に突っ込めば自機狙いになるって感じです。(cos()は角度からx座標、sin()は角度からy座標を求める関数。)


余談:実は自機狙い弾は位置ベクトルというものを使っても作れたり。そして位置ベクトルの方が高速だったり。
アバター
たんじぇ 2018/8/24 11:13 ◆WDmFkVwZ4yMl
sin, cos, tan をまとめて三角関数と呼び、これは高校で習うけど中学の数学を全部知ってないと出来ないわけではないので、図書館で読みやすそうな三角関数の本を見てみると理解が深まります。

三角関数は教科書や教える人や書いてある本などで教え方が違ってたり切り口が違っていたりするので、いろんな本やいろんな人の説明を参考にしてみるといいです。


図としてわかりやすいのはwikipediaの「単位円による定義」の章にある図です。
https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0

半径1の円で sin, cos, tan がとる値はここという図が載っています。(ATANは載ってません)

アークとつく三角関数は逆関数で、今度はwikipediaの逆三角関数が詳しいです、が詳しすぎて訳分からないのと、高校数学でもあんまり勉強する内容じゃなかったりします(ちょっとだけATAN=arctan が載ってます)
https://ja.wikipedia.org/wiki/%E9%80%86%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0

(続く)
アバター
たんじぇ 2018/8/24 11:16 ◆WDmFkVwZ4yMl
三角関数は 角度 から 値 を求めます
逆三角関数は 値 から 角度を求めます
どちらも値が具体的にどんな値になるかはあんまり気にしません (0度や90度などの場合に1とか0とかを気にすることはあります)

wikipedia三角関数の図は、角度から三角関数の値を求めたときに半径1の円でどこの長さになるかの図です。
tanは分かりづらい位置に書いていますが tan値 = sin値/cos値 という値と考えます。(tanはそういう定義なのです)

cosは角度から半径1の x座標が求まります(半径100なら値も100倍)
sinは角度から半径1の y座標が求まります(半径100なら値も100倍)
tanは角度から sin値/cos値 が計算され、y座標/x座標の結果が求まります
※100/100と1/1が同じ1のように、半径100のsin値/cos値の割り算結果と 半径1のsin値/cos値の計算結果が同じなのに注目すると tanの値は半径1を気にしなくていい


逆三角関数は 値から角度を求めるので、ATANは tan で求めた値 から角度が求められます

tan の値は sin値/cos値 で求まります
cos値が x座標、sin値が y座標 で、cos値とsin値は半径1かどうか気にする必要がありますが、tan値の場合は半径1かは気にしません

なのでプチコンでの座標から x座標/y座標 を計算して tan値とし、逆三角関数の ATAN に渡すと、原点(0,0) から (x,y) の角度が求まります
※ATANはx座標とy座標を渡しても求められます

ATANでx座標とy座標から角度が求まったので、cosとsinに角度を渡すと半径1での x座標とy座標がもとまります。
半径1での座標なので、cosで求めた x座標分移動し、sinで求めた y座標分移動すると、斜めに 1 の距離だけ移動することになります。

これを10倍すれば斜めに10の距離だけ移動することになり、好きな距離だけ斜めに移動することができます。

斜めが45度の場合、斜めに10の距離を移動する場合、x座標もy座標も だいたい7の距離を移動することになります。

単純にxもyも 10 だけ移動すると、斜めだけやたら早い移動をしてちょっと不自然になってしまうので、斜めの移動をちゃんと移動するばあいに、ATANを使って斜めの移動距離を求めるようにしています。
アバター
KNTK 2018/8/24 15:04 ◆.O1reuuyjCCS
とても詳しくありがとうございます!

あーくは、逆という意味ですね。
sin,cos,tanの意味は分かりました、直角三角形の鋭角の角度による辺同士の比のことですね。

自機と自機狙い弾発射地点(以下発点)の座標の差をatan(y,x)に入れて、
出てきた角度をrとすると、
cos(r)*飛距離
sin(r)*飛距離
を発点のx,y座標にそれぞれ足せばいいわけですね。

atan関数にいちいち(y,x)の引数がある理由も分かってすっきりしました。
(実は、以前ブロック崩しで単にxとyの移動量だけで作ったら玉が速くなったり遅くなったり不自然になったことがありました。これで解決ができます!)

高校数学楽しみです。
アバター
KNTK 2018/8/24 15:07 ◆.O1reuuyjCCS
ベクトルは頭がパンクしそうなので今後の楽しみに...

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -