Здравствуйте, помогите пожалуйста с прямолинейным движением.
Есть такой код который выполняется тогда когда пользователь отпустил кнопку выстрела.

Код AS1/AS2:
application.users_so.lock();
var PersonObj = new Object();
PersonObj= application.users_so.getProperty(this.id);
var dX=PersonObj.cX; // PersonObj.cX = Координата по "Х" где размещён стреляющий объект
var dY=PersonObj.cY; // PersonObj.cY = Координата по "Y" где размещён стреляющий объект
var dR=PersonObj.fR; // PersonObj.fR = Угол поворота
var buffer=9000;
while (buffer>=0)
{
dX += Math.round(Math.cos(Math.PI/180*dR));
dY += Math.round(Math.sin(Math.PI/180*dR));
distance = Math.sqrt(Math.pow(PersonObj.fX-dX,2)+Math.pow(PersonObj.fY-dY,2));
// dangerZ['XxY'] массив в котором прописанны все не прострелюющие элементы
if (dangerZ[Math.round(dX)+'x'+Math.round(dY)])
{
PersonObj.fX=dX; // PersonObj.fX = Координата по "Х" куда ведёться выстрел
PersonObj.fY=dY; // PersonObj.fY = Координата по "Y" куда ведёться выстрел
buffer=-2009;
}
if (buffer!=-2009)
if (distance>buffer)
{
buffer=-2009;
} else buffer=distance;
}
application.users_so.setProperty(PersonObj.id, PersonObj);
application.users_so.unlock();
Суть такова, что я имею две точки, начального и конечного движения ракеты, при таком алгоритме бывают такие явления как, пролёт не пролетаемых зон + попадает в зону но взрыв перемещается либо немного вправо, либо в лево, либо вообще по вертикально то вверх, то влево, то вниз, то вправо в зависимости на какой угол поверёнута башня. Одним словом я точно понял что мой алгоритм не верно работает. Подскажите что не так, либо если есть готовый пример просчёта каждой составляющей целочисленной точки (погрешность при round/floor не имеет значения) на отрезку от А(х,у) до Б(х,у).