円運動の速度をスムーズに増減する方法を探しています。
円のパラメトリック方程式を使用して、時間の経過とともに円内のオブジェクトを移動できます。
x = center_x + radius * sin(time * speed)
y = center_y + radius * cos(time * speed)
このアプローチの問題は、speed = speed + 1
動きがぎくしゃくするため、オブジェクトを加速するために単純に行うことができないことです。x値とy値は、オブジェクトの前の位置を基準にするのではなく、絶対値に基づいてフレームごとに再計算されるため、これは理にかなっています。
別のアプローチは、オブジェクトの速度を表すベクトルを使用し、代わりに円運動をベクトルに適用することです。
v_x = radius * sin(time * speed)
v_y = radius * cos(time * speed)
x = x + v_x
y = y + v_y
このアプローチの問題は、速度を変更すると半径が拡大または縮小することです。これは、動きが現在の位置を基準にしているため、速度を変更すると基本的に時間がスキップされるため、理にかなっています。
私が考えることができる1つの実装は、オブジェクトから円の中心を指すベクトルを使用することです。次に、垂直ベクトルを使用してオブジェクトの位置での円の接線を計算し、それを正規化し、速度でスケーリングすることができます。このような問題ではやり過ぎのように思われるため、まだ実装していません。もっと簡単な解決策があるかどうか教えてください。ありがとう!