[Top Page][Edit][Discussion][Edit History][All Pages][Recent Changes][->Japanese]

HSPコンテスト:ショートプログラム:数学・物理編:振動


    物体の振動のさせ方はいろんなところで利用できるので覚えておくと便利です。

    振り子やメトロノーム、ばねなども全部同じ仕組みです。

    物が振動するためには、物が左にあるときは右に、右にあるときは左に押してやればいいわけですから

            x = 200
            repeat
                    await 10
                    x += speed/100
                    if x<0: speed += 10; 0 を中心に左右に揺れる
                    if x>0: speed -= 10
                    line x+200, cnt
            loop
    
    

    となります。

    さらに普通は振動の中心から離れるほど強い力が働くので、

            x = 200
            repeat
                    await 10
                    x += speed/100
                    speed += -x/10; 0 を中心に左右に揺れる
                    line x+200, cnt
            loop
    

    とするとさらに本物っぽくなります。

    一般に

            repeat
                    位置 += 速度/FPS
                    速度 -= 位置/重さ
            loop
    

    で振動させることができるので、覚えておくとめちゃ便利です。 FPS や 重さはそれっぽく見えるように適当に変えちゃってOKです。

    普通は重さを 1 にして、FPS のほうでいろいろ調節します。(そのほうが切り捨て誤差の関係で滑らかに動きます)

    ちなみに動作がカクカクしているのは HSP で小数点が扱えないせいです。 一応 HSPコンテスト:ショートプログラム:数学・物理編:運動 にちょこっと書いてありますが、あらかじめ x 倍した状態で計算しておいて、描画するときに x で割るようにするときれいになります。

    GALAXY SHOOTING・STAR(ソース) のノーマッドや、 グラビタ・パーティクルず(ソース) の粒子、 Line-Ball(ソース) のゴムなどはすべてこの仕組みを応用しています。