Я сделал это с JQuery.
Вот математика позади - без тригонометрических функций.
Сделайте небольшой шаг одним мячом в нужном направлении.
function pushball(distance,x,y,xgoal,ygoal,step){/
var factor=1-step/distance;
var x=xgoal+(xgoal-x)*factor;
var y=ygoal+(ygoal-y)*factor;
return [x,y];
Проверьте все другие шары [i], сталкиваются ли они.
function distance(x1,y1,x2,y2){
var x=x1-x2;var y=y1-y2;
return Math.sqrt(x*x+y*y);
}
var dist=distance(x,y,x[i],y[i]);
var touch=r+r[i];
Теперь - по прямой линии, проходящей через две центральные точки, - толкните другие шары (если они столкнутся), чтобы они просто касались друг друга.
if(dist<touch){
var range=dist-touch;
newposxy=pushball(distance,x,y,x[i],y[i],range);
}
Слайд каждого шара [i], позиция которого изменилась. Помните, что x, y - это координаты средней точки, а не верхнего левого угла.
. $ ( "# Шар") смещение ({ "влево": Math.round (х [I] -r), "верх": Math.round (у [I] -г)});
Если вы хотите, чтобы это работало, смотрите здесь