Ваша проблема в том, что все основано на времени, вы не получаете обратный вызов каждый раз, когда холст перемещается на один пиксель, вы получаете обратный вызов каждый раз при рендеринге кадра - и система даже не пытается усердно рендерить кадры с постоянной скоростью.
Конечный результат - это то, что вы видите, иногда вы можете получить обратный вызов после перемещения на 1/2 пикселя, потому что все прошло гладко, в следующий раз, когда два пикселя сместятся, потому что GC сработал в середине кадра, и время после этого это перемещение на 4 пикселя, потому что Word, работающий в фоновом режиме, украл несколько циклов ЦП для запуска заклинания chekcer.
Вот как эти вещи работают, вы можете либо справиться с этим и установить более высокий допуск для обнаружения столкновений, либо вы можете запускать симуляции за пределами экрана на «виртуальной временной шкале», где вы можете перемещать объекты в любом темпе, в котором вы хотите, без учитывая реалии анимации на экране.
Я написал программное обеспечение, которое выполняет симуляцию и обнаружение столкновений для реальных самолетов - и я могу вам сказать, что для этого потребовалось много тяжелой работы, любой каркас, созданный для анимации, оптимизирован для перемещения объектов на экране, а не для всей работы, которую вам нужно делать для высококачественного моделирования и демонстративно, а не для точного обнаружения столкновений.