すだちキャンパス

すだちキャンパス

やってみたこと、学んだことなどのメモ。

octaveでピンポン(?)

C言語octaveで、壁に跳ね返る球の軌跡を描いてみました。
なぜこんなことをしてみたかというと、統計力学の授業で、「ピンポン玉を壁にぶつけてはねかえり続けるとどうなるか?」と先生がおっしゃっていたからです。

アルゴリズム

というほどのこともないですが。
座標が箱のサイズ(今回は20*20)の範囲外になると、比例計算して箱の端っこにあるべき座標になります。そして、移動してきた方向を考えて次に進む向きを決めます。両端が半円の時もほぼ同じ仕組みです。

書いたコードと結果(四角形の場合)

f:id:sweetgohan:20181009123833p:plain

書いたコードと結果(両端が丸い場合)

f:id:sweetgohan:20181009123908p:plain

なんか細かく見ると所々挙動がおかしいのですが、まあだいたいこんな感じになりました。
考察としては、ただ四角い箱だと同じ場所を跳ね返り続けるんですが、両端を丸くすると少しカオスっぽくなることがわかります。

それから、いつも思ってるんですけど全体的にコードが汚いですよね。と思っていてこの後の記事に繋がるんですが、if文の中に指示を入れまくるんじゃなくて関数としてまとめてからif文に入れた方が綺麗で良いらしい。というかそもそもswitch文を使うべきなのかもしれない。
まあこれについては次回の記事でまとめたいと思います。