Обнаружение столкновения с мячом с использованием формулы ab c - PullRequest
0 голосов
/ 26 мая 2020

для проекта в моем Uni Мне было поручено написать систему обнаружения столкновений с использованием формулы Quadrati c для определения столкновений и расчета времени столкновения. В соответствии с этим вычисление должно произойти, если B ^ 2 -4 * a *c положительно. Моя проблема в том, что это всегда возвращает 800000. Мой код:

CollisionInfo FindEarliestCollision() {
        MyGame myGame = (MyGame)game;
        // Check other movers:          
        for (int i = 0; i < myGame.GetNumberOfMovers(); i++) {
            Ball mover = myGame.GetMover(i);
            if (mover != this) {
                Vec2 relativePosition = _oldPosition - mover.position;
                double a = Vec2.QuadraticequationA(velocity);
                double b = Vec2.QuadraticequationB(relativePosition, velocity);
                double c = Vec2.QuadraticequationC(relativePosition, radius, mover.radius);
                Console.WriteLine(Math.Pow(b, 2) - 4 * a * c);
                if (a >0 && Math.Pow(b,2) - 4*a*c >0 ) { 
                    // return collison here
                    SetColor(255, 0, 0);
                }
                else { SetColor(0,255, 0); }
            }
        }
        // TODO: Check Line segments using myGame.GetLine();
        return null;
    }

Mover - это второй мяч. Я решаю для AB C так:

    public static double QuadraticequationA(Vec2 velocety)
    {
        return Mathf.Pow(velocety.Lenght(), 2);
    }
    public static double QuadraticequationB(Vec2 relativPositon, Vec2 velocety)
    {
        return 2 * (relativPositon.Dot(velocety));
    }
    public static double QuadraticequationC(Vec2 relativPositon,float radius1, float radius2)
    {
        return Mathf.Pow(relativPositon.Lenght(), 2) - Mathf.Pow((radius1 + radius2), 2);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...