列車の加減速

昨日電車の中で考えてたこと。単に電車のシンボルを時刻表通りに動作させるだけでは前回と同じで面白くないので、出発後と到着前に加減速をするようにしてみたい。また、時刻表には病の記載がないので、記載上停車時間が0秒のことがしばしばある。例えば、山手線の時刻表データは、発時刻しか書いてないので、あたかも全駅で1秒も停車しないような動きしかできない。
試しに山手線で加速、減速のタイミングと停車時間を計ってみた。すると、加速にはたいてい30秒、減速には30〜45秒かかることがわかった。停車時間は25秒〜1分半とかなり幅があった。
簡単のため、加速したら最高速になり、その後減速するまで速度は一定と仮定すると、モデルは次のようになる。a: 加速にかかる時間、b: 減速にかかる時間、c: 発車から停車までにかかる時間、vmax: 最高速。
プログラムでは、現在時刻を与えると現在位置を返す、という関数を作ればよい。グラフのx座標の現在時刻のところにy軸に垂直な線を引いて、できた図形の面積が現在位置となる。これを計算することになる。必要な数字はすべて与えられているので、式さえわかれば計算は容易だろう。
まずvmaxを
a*vmax/2 + (c-b-a)*vmax + b*vmax/2 = 駅間距離
から算出し、それがわかればあとは三角形や台形や長方形の面積を出して足せばOKでしょう。これで発車、停車の簡単なシミュレートができそうだ。ただこのモデルだと現在位置は現在時刻の2次関数になるから、自由落下みたいな加速、ボールを上に投げたときのような減速になるのかな。ちょっと急速すぎるかなぁ。まあ、不自然かどうかはできてから考えよう。
あとは停車時間のモデルだけれど、駅ごとにパラメーターを設定するか、一律のルールを作るか(例えば発時間=着時間だったら30秒にするとか)。一律の方が楽だな。


コメントを残す

メールアドレスが公開されることはありません。