Предостережение: я не собираюсь предполагать, что это совершенно правильно. Физика не моя специальность.
Движение не влияет на нормаль. Как правило, нормаль - это просто нормализованный (длина 1) вектор, указывающий направление, обычно направление, с которым поли смотрит на трехмерный объект.
Я думаю, что вы хотите найти нормальное столкновение между двумя кругами, да? Если это так, то одно из замечательных свойств сфер состоит в том, что если вы найдете расстояние между их центрами, вы можете нормализовать его, чтобы получить нормаль к сфере.
То, что кажется правильным для двумерной физики, это то, что вы берете скорость * массу (энергию) сферы и умножаете ее на нормализованный вектор для другой сферы. Добавьте результат к энергии сферы назначения, вычтите ее из энергии исходной сферы и разделите каждую по отдельности на массу, чтобы получить результирующую скорость. Если другая сфера движется, сделайте то же самое в обратном порядке. Конечно, вы можете упростить математику, но уже поздно, и мне не хочется этого делать:)
Если обе сферы движутся, повторите процесс для другой сферы (хотя, возможно, вы могли бы упростить это уравнение, чтобы получить более эффективную математику).
Это просто математика, но она дает правильные результаты. И, эй, я когда-то самостоятельно вычислял углы Эйлера, так что иногда моя математика «из-под салфетки» действительно срабатывает.
Это также предполагает совершенно упругие столкновения.
Если я ошибаюсь, я был бы рад узнать, где:)