• Как сделать абсолютно упругое столкновение окружностей?

    @alkolove1 Автор вопроса
    Чуть переделал код
    Столкновение стало абсолютно упругим. Но мяч под некоторыми углами довольно резко сменяет позицию.
    Всё-таки костыльный вариант с циклом пересечения не самый удачный.

    boolean collision(float Radius2, float X2, float Y2) 
        {
            Circle ball = new Circle();
            ball.radius = Radius / 2;
            ball.x = rect.x + ball.radius;
            ball.y = rect.y + ball.radius;
    
            Circle obj = new Circle();
            obj.radius = Radius2 / 2;
            obj.x = X2 + obj.radius;
            obj.y = Y2 + obj.radius;
    
            if (ball.overlaps(obj)) {
    
                while (ball.overlaps(obj)) {
                    double xDelta = (ball.x + ball.radius / 2 + rect.dx) - (obj.x + obj.radius / 2);
                    double YDelta = (ball.y + ball.radius / 2 + rect.dy) - (obj.y + obj.radius / 2);
                    rect.dx = (float) xDelta;
                    rect.dy = (float) YDelta;
                    ball.x+=rect.dx*Gdx.graphics.getDeltaTime();
                    ball.y+=rect.dy*Gdx.graphics.getDeltaTime();
                }
                rect.x=ball.x-ball.radius;
                rect.y=ball.y-ball.radius;
                return true;
            } else return false;
    Ответ написан
    Комментировать