У меня есть метод, который отражает шары от стены, а также друг от друга. Радиус каждого шара равен 50.Столкновение между шарами
public void reflectBalls(){
for(int j = 0; j < 2; j++){
if(ball[j].getY() <= NWall) ball[j].flipVertical();
else if(ball[j].getY() >= (SWall - 50)) ball[j].flipVertical();
else if(ball[j].getX() <= WWall) ball[j].flipHorizontal();
else if(ball[j].getX() >= (EWall - 50)) ball[j].flipHorizontal();
}
for(int i = 0; i < 2; i++){
for(int j = 0; j < 2; j++){
if(i == j){
continue;
}else{
double ax = (double)ball[i].getX();
double ay = (double)ball[i].getY();
double bx = (double)ball[j].getX();
double by = (double)ball[j].getY();
double distx = (ax-bx)*(ax-bx);
double disty = (ay-by)*(ay-by);
double distance = Math.sqrt(distx + disty);
if(Math.floor(distance) <= 100){
ball[i].flipHorizontal();
ball[j].flipVertical();
ball[i].flipVertical();
ball[j].flipHorizontal();
}
}
}
}
}
Первая часть (отражение от стен) работает отлично. Однако шары не сталкиваются; они просто проходят друг через друга. Я пробовал много разных способов, но, возможно, есть какая-то математика, которую мне не хватает. Мой алгоритм работает на основе теоремы Пифагора, где разность между координатами X и разностью между координатами Y квадратична, а их сумма - это расстояние между центрами.
В этом была проблема. Шарики не сталкиваются в нужное время, но это, скорее всего, математическая ошибка с моей стороны. – nh0815