Как сделать плавное перемещение?
В код сильно не вникал, бью наугад:
Возможно вы говорите об изинге (easing). 
Если представить время от начала анимации до конца как промежуток от 0 до 1, а начальное положение объекта (или другое свойство) и конечное тоже как промежуток от 0 до 1, то функцией изинга называют функцию, дающую в соответствие каждой точке первого промежутка точку второго.

В самом простом случае функция изинга возвращает принимаемое значение без изменений (для начального момента времени возвращает 0, для конечного 1). В этом случае объект движется строго линейно без ускорений и замедлений, оттого движение кажется дерганым и неестественным.

Чтобы придать анимации более плавный вид, нужно имитировать ускорение. В JQuery функция изинга по-умолчанию имеет вид (упрощенно):
function swing(t) {
	return (-Math.cos(p*Math.PI)/2) + 0.5;
}

Т.е. используется синусоидальная зависимость.

Вот примеры того, как работают другие функции изинга, подключаемые сторонним плагином и не входящие в состав jquery:
www.lemonsanver.com/jQuery/easingAnimationPlugin.html

Для того, чтобы воспользоваться таким-же методом работы где-бы то ни было, нужно организовать процесс следующим образом:
1) При старте анимации известна её продолжительность и записывается время старта анимации
2) также известно конечное значение анимируемого параметра (или нескольких), записывается их начальное значение.
3) Периодически вызывается функция анимации (таймер, или цикл). Из текущего времени, времени начала анимации и требуемой продолжительности она находит время t — число от 0 до 1.
4) t передается в в функцию изинга
5) Из полученного значения и данных о начальных и конечных значений параметров высчитываются текущие значение.
6) Пункт 3) повторяется, пока время анимации не истечет.
Посмотрите этот сайт: jstween.blogspot.com/

Там реализация на js плавного движения объектов.

Если вдруг не подойдет, то попробуйте поискать в гугле по словосочетанию: 

motion tween algorithm