Discuss Scratch
- kemo33oolong-2025x5G
-
Scratcher
41 posts
Scratch数学カフェ
予定としてゲームを作る者です。攻撃でビームランチャーのような一直線に放つ攻撃で、射角を算出するプログラムを作りたいです。弧度法と度数法両対応にしたいです。地面からマウスカーソルで撃ちたい向きまでの角度を算出して、表示するものです。イメージとしては▄︻┻┳═一∠ )x°のような感じです。教えてください(補足)地面に水平な角度を0、右斜め上60°なら60を返す。射角決定までキャラクターがいる地面の境界とマウスの点が作る角が表示される
Last edited by kemo33oolong-2025x5G (July 4, 2026 01:39:17)
- KimiruHamiru
-
New Scratcher
500+ posts
Scratch数学カフェ
#1154「合っています」
っていうことはsinとか使わずにでも一応プログラミングはできるって話で合っていますか?
というのが短い答えなのですが、
Scratchの「~に向ける」のような「動き」ブロックも
中身は「JavaScriptのMath.sin()とかの機能を使って書かれている」
と思われる
(たぶんこのへん: https://github.com/scratchfoundation/scratch-vm/blob/develop/src/blocks/scratch3_motion.js )
ので、
「sin」とか使わなくても何でもプログラミングできる(これだと数学の話かもしれない)
と言うよりは
(( )の[sin v]::operators)とかの、
「sinとかのブロック」を使わなくても何でもプログラミングできる(これはScratchに限定した話に違いない)
と言う方が誤解がない気はします。
「数学のsin()自体を、数学の別の何か、特に+-×÷のような四則演算だけで代替する」という方法があるかどうかは、私はわかりません。
- inoking
-
Scratcher
1000+ posts
Scratch数学カフェ
「数学のsin()自体を、数学の別の何か、特に+-×÷のような四則演算だけで代替する」という方法があるかどうかは、私はわかりません。近似する方法がいくつも知られています。
Scratch 内でも実現されています。
「近似」での検索結果
- hgpihe3746
-
Scratcher
11 posts
Scratch数学カフェ
予定としてゲームを作る者です。攻撃でビームランチャーのような一直線に放つ攻撃で、射角を算出するプログラムを作りたいです。弧度法と度数法両対応にしたいです。地面からマウスカーソルで撃ちたい向きまでの角度を算出して、表示するものです。イメージとしては▄︻┻┳═一∠ )x°のような感じです。教えてください(補足)地面に水平な角度を0、右斜め上60°なら60を返す。射角決定までキャラクターがいる地面の境界とマウスの点が作る角が表示されるえーと、atanを使うのはどうですか?
atanは角度を求めるやつで、atan(y/x)を当てはめるとそこの座標までの角度が出ます。
([atan v] of ((ToX) / (ToY))::operators)だと0,0からの距離が出ます!
もし自分自身のXYからの距離を求めたいならToX,ToYからX座標、Y座標を引くといいはずです!
(注意点)
たまに正常に動かないこともあるので、if分岐を使って正常に動かない角度を補うのがいいと思います!
- kemo33oolong-2025x5G
-
Scratcher
41 posts
Scratch数学カフェ
#1169ありがとうございます。事前に調べてもスクラッチで再現できそうなものが出てこなかったのでありがとうございます。(三角関数を習っていない人)tanとかatan2なる物がありますが、atan2とは何ですか?またスクラッチ上でatan2を再現はできるのですか?
- zepto_0321
-
Scratcher
1 post
Scratch数学カフェ
#1169ありがとうございます。事前に調べてもスクラッチで再現できそうなものが出てこなかったのでありがとうございます。(三角関数を習っていない人)tanとかatan2なる物がありますが、atan2とは何ですか?またスクラッチ上でatan2を再現はできるのですか?
atan の返り値の定義域は-90° <= atan x <=90°で、
atan2 の返り値の定義域は -180°<= atan2 x <= 180°です。
射角を出すならatan2(y,x)のほうが使い勝手が良いです。
入力のx,y座標からどの象限に座標があるかで場合分けし、角度を補正するとatanだけでatan2を再現できます。
- inoking
-
Scratcher
1000+ posts
Scratch数学カフェ
https://scratch.mit.edu/projects/1351235121「ハート関数」についてでしょうか。
教えてください
こちらから引用します。
ネットにいくらでも情報は出ています。
ここで誰かが解説するよりも
はるかに分かりやすく丁寧な解説がいくつも見つかるでしょう。
- inoking
-
Scratcher
1000+ posts
Scratch数学カフェ
「定義域」ではありません。定義域は入力です。#1169ありがとうございます。事前に調べてもスクラッチで再現できそうなものが出てこなかったのでありがとうございます。(三角関数を習っていない人)tanとかatan2なる物がありますが、atan2とは何ですか?またスクラッチ上でatan2を再現はできるのですか?
atan の返り値の定義域は-90° <= atan x <=90°で、
atan2 の返り値の定義域は -180°<= atan2 x <= 180°です。
射角を出すならatan2(y,x)のほうが使い勝手が良いです。
入力のx,y座標からどの象限に座標があるかで場合分けし、角度を補正するとatanだけでatan2を再現できます。
出力なので「値域」です。
- hgpihe3746
-
Scratcher
11 posts
Scratch数学カフェ
atan2ってあるんですね、atanから求めることとかできるんですか?できればScratchblocksで教えていただけると嬉しいです#1169ありがとうございます。事前に調べてもスクラッチで再現できそうなものが出てこなかったのでありがとうございます。(三角関数を習っていない人)tanとかatan2なる物がありますが、atan2とは何ですか?またスクラッチ上でatan2を再現はできるのですか?
atan の返り値の定義域は-90° <= atan x <=90°で、
atan2 の返り値の定義域は -180°<= atan2 x <= 180°です。
射角を出すならatan2(y,x)のほうが使い勝手が良いです。
入力のx,y座標からどの象限に座標があるかで場合分けし、角度を補正するとatanだけでatan2を再現できます。
Last edited by hgpihe3746 (July 4, 2026 11:11:48)
- inoking
-
Scratcher
1000+ posts
Scratch数学カフェ
atan2ってあるんですね、atanから求めることとかできるんですか?できればScratchblocksで教えていただけると嬉しいですすでに書かれています ↓
入力のx,y座標からどの象限に座標があるかで場合分けし、角度を補正するとatanだけでatan2を再現できます。
こちらにも書かれていることですが
「まずは自分で調べたり考えたりしましょう。」
「atan2」での検索結果 でもいくつもヒットします。
- hgpihe3746
-
Scratcher
11 posts
Scratch数学カフェ
#1177 ありがとうございます!
Last edited by hgpihe3746 (July 5, 2026 00:14:03)
- hgpihe3746
-
Scratcher
11 posts
Scratch数学カフェ
自分としての疑問なのですが、scratchのsin関数を使用してasin関数は作れますか?再現できるのかどうなのか気になるのでできればコメントお願いします
- newmomizi_txt
-
Scratcher
1000+ posts
Scratch数学カフェ
#1179
「y = sin(x) となるような x (-90° <= x <= 90°) を求める問題」といえますから、可能です。
もっとも簡単なのは、この範囲でsinが単調増加することを利用して、二分探索する方法だと思います。
たとえば、y = 0.866 のケースを考えてみると、
sin(0°) < y < sin(90°)
sin(45°) < y < sin(90°)
sin(45°) < y < sin(67.5°)
sin(56.25°) < y < sin(67.5°)
と、「現状判明しているxの範囲の中間値」との比較を繰り返すことで、だんだんと範囲を絞っていくことができますね。
これを8回繰り返せば、解の範囲は 180/256 ≒ 0.703° 単位で求まります。
「y = sin(x) となるような x (-90° <= x <= 90°) を求める問題」といえますから、可能です。
もっとも簡単なのは、この範囲でsinが単調増加することを利用して、二分探索する方法だと思います。
たとえば、y = 0.866 のケースを考えてみると、
sin(0°) < y < sin(90°)
sin(45°) < y < sin(90°)
sin(45°) < y < sin(67.5°)
sin(56.25°) < y < sin(67.5°)
と、「現状判明しているxの範囲の中間値」との比較を繰り返すことで、だんだんと範囲を絞っていくことができますね。
これを8回繰り返せば、解の範囲は 180/256 ≒ 0.703° 単位で求まります。
Last edited by newmomizi_txt (July 6, 2026 02:09:31)