速度を変えて動かしてみる(オートシェイプ)

昨日まで、ユーザーフォーム上に散らばせたコマンドボタンを、じわじわと整列させて遊んでいた。
infoment.hatenablog.com
各ボタンは、いわゆる「等速直線運動」で動かしていた。

しかし、もっと何か別の動かし方はできないものか。ということで、今回はそれに挑戦するための下準備に挑戦する。
f:id:Infoment:20181130225728p:plain

さて、どんな動かし方にしてみようか。そもそも、どんな動きだと面白くなる?
この辺り、実はほとんど知識が無い。ということで、安易に「等加速度直線運動」っぽいものにすることにした。

距離=初速度×時間+加速度×時間の二乗÷2

これを応用して、シート上の〇をフワフワと動かしてみた。
上下だけだと味気ないので、右に等速運動させてみる。

Sub MoveTest()
    Dim myShape
    Set myShape = ActiveSheet.Shapes.Range(Array("Oval 1"))
    
    Dim i As Long
    Dim j As Long
    
    For j = 1 To 2
        For i = 1 To 50
            myShape.Top = myShape.Top - 1 / (0.01 * i + 0.5 * 0.01 * i ^ 2)
            myShape.Left = myShape.Left + 1
            Application.Wait [now()+"0:00:00.1"]
        Next i
            For i = 1 To 50
            myShape.Top = myShape.Top + 1 / (0.01 * i + 0.5 * 0.01 * i ^ 2)
            myShape.Left = myShape.Left + 1
            Application.Wait [now()+"0:00:00.1"]
        Next i
    Next j
End Sub

結果はこちら↓。目的地付近まで急速接近して、じわっと目的地に到着。返す刀で、次の目的に素早く移動開始。のようなイメージだ。
f:id:Infoment:20181130230748g:plain
なお、移動距離は上式の逆数を用いているため、これを等加速度運動と呼んでよいかどうかは分からない。

さて、どう応用したものか。

今日はここで時間切れ。明日また考えてみます。

参考まで。