Я работаю над небольшим физическим движком и захожу в тупик. То, что я пытаюсь сделать, это направить луч от начала координат четырехугольника (двухмерный вектор) к направлению, основанному на его скорости. Скорость квадроциклов также является двумерным вектором.
Чтобы получить направление для луча, я делаю следующее:
(quad.position + quad.velocity) - quad.position
Это вернет двумерный вектор, который можно использовать в качестве направления. Проблема, с которой я сталкиваюсь, заключается в том, что когда одна из осей или обе равны 0, при выполнении вышеуказанной математики нет направления. В результате будет 0 по одной из его осей (где не было скорости).
Я использую это направление, используя этот луч для проверки столкновения между другими четырехугольниками. Это можно сделать, рассчитав точное время вдоль луча, когда произошло попадание. Я делаю это, имея положение 2-го четырехугольника - начало луча (положение 1-го четырехугольника) / направление луча. Очевидно, что когда одна из осей направления равна 0, я получаю ошибку DivideByZero.
Мне было интересно, что я могу сделать, чтобы исправить это поведение. Мне предстояло еще сделать рейкастинг, но как бы бесконечный. Или, другими словами, сделайте приведение лучей, но по прямой линии вдоль оси, имеющей 0 в качестве направления. Когда я передаю какое-то произвольное число, например 0,00001, все работает, но луч немного отклоняется от прямой линии, которую я хочу.
Я искал в Интернете, но не могу найти ничего полезного.