マウスで何かを動かしてその加速度を取得する 2


-- 今度はマウスポインターの xy 両軸方向の加速度を取得してみる。
-- 確認しやすいよう、更新速度は遅めにする。
step = 0.5
timer.start(step)

posTwoAgoX,   posTwoAgoY   = 0, 0
posOneAgoX,   posOneAgoY   = 0, 0
posNowX,      posNowY      = 0, 0
speedOneAgoX, speedOneAgoY = 0, 0
speedNowX,    speedNowY    = 0, 0
accelX,       accelY       = 0, 0

function on.paint(gc)
   gc:drawString("posTwoAgo X, Y    : "..posTwoAgoX..", "..posTwoAgoY.." [pixel]",10,10)
   gc:drawString("posOneAgo X, Y    : "..posOneAgoX..", "..posOneAgoY.." [pixel]",10,30)
   gc:drawString("posNow X, Y          : "..posNowX..", "..posNowY.." [pixel]",10,50)   
   gc:drawString("speedOneAgo X, Y: "..speedOneAgoX..", "..speedOneAgoY.." [pixels/sec]",10,70)
   gc:drawString("speedNow X, Y      : "..speedNowX..", "..speedNowY.." [pixels/sec]",10,90)
   gc:drawString("acceleration X, Y    : " ..accelX..", "..accelY.." [pixels/sec"..string.uchar(0x00B2).."]",10,110)
   platform.window:invalidate()
end
function on.mouseMove(x, y)
   posNowX, posNowY = x, y
   platform.window:invalidate()
end
function on.timer()
   speedOneAgoX, speedOneAgoY = (posOneAgoX - posTwoAgoX)/step,   (posOneAgoY - posTwoAgoY)/step
   speedNowX,    speedNowY    = (posNowX    - posOneAgoX)/step,   (posNowY    - posOneAgoY)/step
   accelX,       accelY       = (speedNowX  - speedOneAgoX)/step, (speedNowY  - speedOneAgoY)/step
   posTwoAgoX,   posTwoAgoY   = posOneAgoX, posOneAgoY
   posOneAgoX,   posOneAgoY   = posNowX,    posNowY
   platform.window:invalidate()
end