Я хочу только проверить, пересекаются ли два луча. Я сделаю это, рассчитав направление вращения двух «треугольников», созданных из двух лучей. На самом деле это не треугольники, но с математической точки зрения, если бы я только хотел вычислить вращение треугольника, мне нужны только два вектора с общей начальной точкой, а остальное не имеет значения.
Первый треугольник будет образован двумя векторами и отправной точкой. Отправная точка будет отправной точкой первого луча. Первый вектор будет вектором направления первого луча. Второй вектор будет вектором от начальной точки первого луча до начальной точки второго луча. Отсюда мы берем перекрестное произведение двух векторов и отмечаем знак.
Мы делаем это снова для второго треугольника. Опять же, отправной точкой является отправная точка второго луча. Первый вектор - это направление второго луча, а второй - от начальной точки второго луча до начальной точки первого луча. Мы снова берем перекрестное произведение векторов и отмечаем знак.
Теперь мы просто берем два знака и проверяем, совпадают ли они. Если они одинаковы, у нас нет пересечения. Если они разные, у нас есть пересечение. Вот и все!
Вот некоторый псевдокод:
sign1 = cross(vector1, point1 - point2)
sign2 = cross(vector2, point2 - point1)
if (sign1 * sign2 < 0) // If signs are mismatched, they will multiply to be negative
return intersection
Получается пять умножений, шесть вычитаний и одно сравнение.