剣の軌跡の補間


動機
長い得物を振り回すと先の速度が酷く速くなってしまって60fps程度の更新頻度では動いているように見えなくなってしまうために剣の両端の点をバッファに入れて軌跡が描かれることがある。当然のことながら画面更新の頻度そのままで点をサンプリングして軌跡の面を描画すると上図上のようになってしまう。剣が青線の位置にあるときにしか点をサンプリングできないためにガクガクになってしまう。しかしこの少ない情報だけを補間して上図下のようにすることが可能である。

手法
距離を隔て隣接する2辺を平面上の扇形上にあるものとみたててしまう。(実際には微妙なひねりが加わっているが無視してしまう)すると丸みを描く軌跡の中間点の座標が計算できる。


Q1. まず隣接する軌跡の2辺(長さc)を二等辺三角形のそれぞれの辺の下部にあたると見立てると長さxが算出できる。中学生にでも解いてもらおう。実際には三次元的なひねりがあるので2辺のベクトルを導出した長さxだけ伸ばしても当然一点では交わらない。両2辺のベクトルを伸ばして達した座標の中間をこの仮想的な扇形の中心点とする。


Q2. 2辺のベクトルの外積から扇形の角が算出できる。扇形の中心から剣の端への長さをRとすると、角度θに対するR/(R-x)が導出できる。高校生にでも解いてもらおう。

扇形中心から軌跡の辺の端同士を結んだ中間の座標を結ぶベクトルにQ2の解答を掛けて扇形中心の座標へ加えれば、円周分外へ膨らませた座標が得られる。これを補間した点としてバッファへ突っ込む。満足いくなめらかさになるまで中間点を再帰的に算出する。