Three.js столкновение из круга в круг

#javascript #three.js #physics

#javascript #three.js #физика

Вопрос:

Я пытаюсь реализовать объединение по кругу для игры в пул. я пытаюсь заставить шары правильно отскакивать друг от друга при столкновении. я перепробовал несколько руководств и прочитал несколько вопросов по stackoverflow, но ни один из них мне не помог.

мой вопрос: как я могу реализовать столкновение по кругу, которое будет работать в этих двух случаях: 1: движущийся шар сталкивается с неподвижным шаром. 2. движущийся шар сталкивается с движущимся шаром

один из учебников, которые я пробовал:

Учебник

это код, который у меня есть в настоящее время, он в некотором роде работает, но очень глючит:

 function newCollide(ball1, ball2)
{
    a = ball1.position.x - ball2.position.x;
    b = ball1.position.z - ball2.position.z;
    ab = Math.sqrt(((a * a)   (b * b)));
 
    if(ab <= 1.1)
    {
        console.log("collision");
        ball2.speedX = ball1.speedX;
        ball2.speedZ = ball1.speedZ;
        ball1.speedX *= 0.3;
        ball1.speedZ *= 0.3;

        ball1.position.x  = ball1.speedX;
        ball1.position.z  = ball1.speedZ;
        ball2.position.x  = ball2.speedX;
        ball2.position.z  = ball2.speedZ;
    }
}
 

любая помощь приветствуется.

Ответ №1:

При столкновении равных, невращающихся дисков диски просто обмениваются векторами скорости.

В вашем тесте на столкновение вы также должны проверить, что исходное движение направлено навстречу друг другу, чтобы избежать ложных колебаний.

Позиция не меняется во время столкновения, вам следует полностью удалить обновление позиции.