суммарная скорость больше начальной скорости - PullRequest
5 голосов
/ 12 марта 2020

Я играю в бильярд в Java. Я использовал это руководство для разрешения столкновений. Во время тестирования я заметил, что после столкновения между двумя шарами пула возникает большая скорость. Количество дополнительной скорости, кажется, составляет 0% -50%. Около 0% на прямой выстрел и 50% на очень широкий выстрел. Я предположил, что объединенные скорости останутся прежними. Это мой код или мое понимание физики не так?

private void solveCollision(PoolBall b1, PoolBall b2) {

    System.out.println(b1.getMagnitude() + b2.getMagnitude());

    // vector tangent to collision point
    float vTangX = b2.getY() - b1.getY();
    float vTangY = -(b2.getX() - b1.getX());

    // normalize tangent vector
    float mag = (float) (Math.sqrt((vTangX * vTangX) + (vTangY * vTangY)));
    vTangX /= mag;
    vTangY /= mag;

    // get new vector based on velocity of circle being collided with
    float NVX1 = b1.getVector().get(0) - b2.getVector().get(0);
    float NVY1 = b1.getVector().get(1) - b2.getVector().get(1);

    // dot product
    float dot = (NVX1 * vTangX) + (NVY1 * vTangY);

    // adjust length of tangent vector
    vTangX *= dot;
    vTangY *= dot;

    // velocity component perpendicular to tangent
    float vPerpX = NVX1 - vTangX;
    float vPerpY = NVY1 - vTangY;

    // apply vector to pool balls
    b1.setVector(b1.getVector().get(0) - vPerpX, b1.getVector().get(1) - vPerpY);
    b2.setVector(b2.getVector().get(0) + vPerpX, b2.getVector().get(1) + vPerpY);

    System.out.println(b1.getMagnitude() + b2.getMagnitude());

}

1 Ответ

4 голосов
/ 17 марта 2020

Не все это объяснение будет строго в топи c, и я буду предполагать минимальные предварительные знания для размещения потенциальных будущих пользователей - к сожалению, некоторые могут впоследствии найти его pedanti c.


Скорость не является сохраняемой величиной и, следовательно, сумма-сумма скоростей до столкновения не обязательно равна сумме-скоростям после .

Это более интуитивно понятно для неэластичных c столкновений, особенно если учесть такой сценарий, как столкновение астероида с земной луной 1 , где типичная скорость удара составляет порядка 10 - 20 километров в секунду. Если в этом случае скалярная скорость была сохранена - даже при «широком» угле удара 45 ° (наиболее вероятном) - результирующей скорости Луны было бы достаточно, чтобы выбросить ее с орбиты Земли.

Итак, ясно, что скалярная скорость не обязательно сохраняется для столкновения inelasti c. Столкновения Elasti c менее интуитивны.

Это, как вы заметили, происходит потому, что существует сценарий, в котором скалярная скорость при идеально эластичном столкновении c сохраняется (прямолинейное столкновение), в то время как inelasti c столкновения никогда сохраняют скорость 2 . Это создает недопустимое несоответствие.

Чтобы исправить это, мы должны рассматривать скорость как вектор вместо скаляра. Рассмотрим простейшее столкновение elasti c между двумя шарами: один мяч в состоянии покоя, а второй - удар по первой «прямо» (угол удара 90 °). Второй шар остановится, и первый покинет столкновение со скоростью, равной начальной скорости второго. Скорость сохраняется - величина-сумма скоростей до и после равны - все хорошо.

Это, однако, не будет иметь место для углов удара, отличных от 90 °, поскольку сумма значений не учитывает компоненты вектора, компенсирующие . Скажем, например, у вас снова один мяч в покое, а второй ударяет его под углом 45 °. Оба шара затем покинут столкновение под углом 45 ° от начального направления движения второго шара 3 . Два шарика также будут иметь одинаковую составляющую скорости, параллельную начальному направлению движения, и равную , но противоположные перпендикулярные составляющие скорости. Когда вы берете векторную сумму, два перпендикулярных компонента будут отменены, а сумма двух параллельных компонентов восстановит начальный вектор скорости. Тем не менее, величина результирующего вектора скорости каждого шара будет больше, чем величина начальной скорости второго шара - потому что величина рассчитывается суммой квадратов значений и, следовательно, не учитывает противоположные компоненты.

Of Конечно, лучший подход - это не смотреть на скорость, а на импульс - именно сохранение импульса определяет поведение, описанное выше, и с точки зрения импульса объяснение очень простое: оно диктует, что при совершенно эластичном столкновении c скорость центра масс не должна изменяться.


1 Более крупный - поскольку Земля недавно захватила второй истинный спутник .

2 Это Фактически, это часть определения столкновения inelasti c.

3 Дополнительную информацию о расчете углов отклонения см. здесь .

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