1 смени setInterval на setTimeout - есть разница в работе при совпадении событий , и описана также в учебнике на этом сайте
2 используй requestAnimationFrame
http://habrahabr.ru/post/114358/
3 тереть всю канву? тебе ресурсы и нагрузка позволят в дальнейшем? - задумайся о колве объектов и т.д (как вариант, если у тебя нет накладок, оставь пустые поля вокруг объекта и пусть при перерисовке он сам затирает своё прошлое состояние)
В целом не плохо. То что ты используешь вычисленные величины в основной массе это плюс.
MallSerg, и каким боком твои "умозаключения" к реальности ?