WindowsAPIの、GetMouseMovePointsExでマウスの座標の履歴を取得出来るという事なのでテストで書いてみたら以下の事が判明した。

  • 取得した座標の配列には、先頭程時間的に新しいデータが入っている。
  • MOUSEMOVEPOINTのtimeメンバーには連続して同じ値が入っている事が多い。なんだか精度が低いけど、Win128APIではきっとフェムト秒単位で取得出来るようになるんだろうなぁ…。

http://hardware.mcse.ms/archive45-2004-12-116737.html
タップなのかドラッグなのかの判別をするために、押した後の動作イベントの発行を意図的に遅らせている実装らしい。お絵かきソフトとかで細かい書き味とかを再現するのには、統一教会WACOMにお布施する必要があるのかもしれない。

点が細かすぎて邪魔な場合に、Douglas-Peucker Line Approximation Algorithmで最適化出来るらしいので、今度やってみよう。
http://www.codeproject.com/cpp/dphull.asp
20%〜30くらいに減らしても問題無く見える感じ。

マウスを速く動かしすぎると点がまばらになるので、スプラインで補完して描画して滑らかにした方が良いんだろうけど、良いレーザー式のマウスならばまた違うんだろうか?もっとRawレベルなAPIDirectInputとかならもっと細かく取れるのかもなぁ。