У меня есть проблема с круг-круг столкновений detection.I используется следующий алгоритмкруг-круг проблема столкновения
func collision(id,other.id)
{
var vaP1,vaP2,dis,va1,vb1,va2,vb2,vp1,vp2,dx,dy,dt;
if (id!=other.id)
{
dx=other.x-x;
dy=other.y-y;
dis=sqrt(sqr(dx)+sqr(dy));
if dis<=radius+other.radius
{
//normalize
dx/=dis;
dy/=dis;
//calculate the component of velocity in the direction
vp1=hspeed*dx+vspeed*dy;
vp2=other.hspeed*dx+other.vspeed*dy;
if (vp1-vp2)!=0
{
dt=(radius+other.radius-dis)/(vp1-vp2);
//move the balls back so they just touch
x-=hspeed*dt;
y-=vspeed*dt;
other.x-=other.hspeed*dt;
other.y-=other.vspeed*dt;
//projection of the velocities in these axes
va1=(hspeed*dx+vspeed*dy);
vb1=(vspeed*dx-hspeed*dy);
va2=(other.hspeed*dx+other.vspeed*dy);
vb2=(other.vspeed*dx-other.hspeed*dy);
//new velocities in these axes. take into account the mass of each ball.
vaP1=(va1+bounce*(va2-va1))/(1+mass/other.mass);
vaP2=(va2+other.bounce*(va1-va2))/(1+other.mass/mass);
hspeed=vaP1*dx-vb1*dy;
vspeed=vaP1*dy+vb1*dx;
other.hspeed=vaP2*dx-vb2*dy;
other.vspeed=vaP2*dy+vb2*dx;
//we moved the balls back in time, so we need to move them forward
x+=hspeed*dt;
y+=vspeed*dt;
other.x+=other.hspeed*dt;
other.y+=other.vspeed*dt;
}
}
}
x=ball 1 x-position
y=ball 1 y-position
other.x= ball 2 x position
other.y=ball 2 y position
этот алгоритм работает хорошо, когда у меня есть шар изображение 40 х 40 пикселя и мяч центр (20,20) означает, что изображение состоит только из мяча. Но проблема возникает, когда размер изображения составляет 80 х 80. и положение шарового центра (60,60) означает, что мяч является нижним правым углом с радиусом 20. в этом случае есть возникает множественное столкновение, означает участок
x+=hspeed*dt;
y+=vspeed*dt;
other.x+=other.hspeed*dt;
other.y+=other.vspeed*dt;
Невозможно отделить мяч/скорость не меняется в зависимости от столкновения. Я изменил значение x, которое является центром изображения 40,40 - 60,60, центр шара добавляет 20. но результат тот же. Можно сказать, какая проблема. Я считаю, что алгоритм правильный, потому что он хорошо работает во всех остальных случаях, и многие люди использовали этот алгоритм. Проблема меняет положение от центра изображения до центра мяча. Какую поправку я должен сделать для этого? или любая идея. Если кто-то хочет помочь мне сообщить мне адрес электронной почты, чтобы я мог отправить свой полный проект.
Ваш образец кода работает для перемещения шаров в непрерывной 2-й системе координат. Однако в вопросе (который я не полностью соблюдаю) в конце вашего примера кода вы говорите о шарах, которые находятся или находятся не в центре изображения, и что-то о пикселях. Я предполагаю, что проблема заключается в коде, окружающем код, который вы здесь указываете. –