для проекта в моем 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);
}