今回作るもの
今回はスクラッチで振り子運動を作っていきます。振り子の運動はとても複雑な数式になるので、スクラッチのコードで書いていこうと思うととても大変です。実際にスクラッチの中で「振り子」と検索すると三角関数をふんだんに使ったプログラムがたくさん見つかります。今回はとても簡単なコードでかける振り子を紹介します。winbird20さんが作られているコードを参考に解説します。
を押してみてください。支点を中心とした振り子運動が確認できます。
支点とおもりのスプライトを作る
まずは支点とおもりのスプライトを作ります。
おもりは、向きがわかりやすいように横向きのニコちゃんマークにしています。
次に、はじめの位置を設定します
それぞれのスプライトのコードに以下のように、書いて初めの位置を決めます。
おもりを左右に動かす
まず、振り子の運動ではなく、おもりを左右に動かす運動を作っていきます。
おもりのスプライトに移動して以下のようにコードを書きます。
ジャンプをするときのコードに似ていますが右向きの勢いを下の図のように変えていくことで、バネのような動きをつくります。
を押してみましょう。以下のようにバネのような左右の動きがつくれます。
振り子の動きをつくる
では、先ほど作った左右の動きを振り子の動きにかえていきます。振り子は、支点とおもりがひもでつながれています。ですので、おもりから支点までの距離はずっと一定です。ひもの長さを決めてずっとその長さになるように調整を加えていきます。
位置調整のブロックを作るときに、必ず”画面を再描画せずに実行する”にチェックを入れるようにしましょう。それにより処理が格段に速くなり、振り子の動きが作れるようになります。ためしにチェックをはずすとどうなるかもみてみると良いでしょう。
この状態でを押してみましょう。以下のように振り子運動になれば成功です。
ひもをつける
では支点とおもりをひもでつなげていきます。ここで、ペンツールを使います。左下にある拡張機能追加ボタンを押し、ペンを選択します。
ひものコードはどこに書いてもかまいませんが、わかりやすいように、ひものスプライトを作成します。(コスチュームは無し)
ひものコードに以下のように書いていきます。おもりから支点に線を描いては消すという作業をずっと繰り返すことで、動くおもりにひもがついていくのです。
さきほど同様、ひもを描くのブロックをつくるときには、”画面を再描画せずに実行する”にチェックをいれるようにしましょう。
この状態でを押してみてください。以下のようにひもがひもがつながれば成功です。
振り子を減衰させる
これで振り子はできましたが、実際の振り子は空気抵抗でだんだんと振れ幅が小さくなり、最終的にはとまります。それも再現してみます。
細かな解説はしませんが、基本的な考え方は、以下のように、左右に触れるたびに変化スピードを1と1.1の交互にすることで、だんだんと振れ幅が小さくなっていきます。
それに加えて、振れる回数が増えるたびに、変化スピードも小さくなっていきます。
この2点を踏まえ、おもりのコードを以下のように変更します。
これでだんだんと減衰していきます。正確な動きではありませんがおおよその動きは再現できます。
振り子についてはいろいろな人がより正確なコードも書いてくれていますので、振り子で検索して、参考にしてみると良いでしょう。
今回のコード
今回のすべてのコードはこちらから確認できます。