Как проверить, пересекаются ли 2-сегментные сегменты?

Как проверить, пересекаются ли два отрезка, L1 (p1, p2) и L2 (p3, p4)? Мне не нужна точка пересечения, мне просто нужно знать, пересекаются они или нет. Поскольку мое приложение так много вычисляет, мне нужно найти быстрое решение.

Спасибо

Ответ 1

Чтобы проверить, пересекаются ли два сегмента линии, вы можете использовать Java 2D API, в частности методы Line2D.

Line2D line1 = new Line2D.Float(100, 100, 200, 200);
Line2D line2 = new Line2D.Float(150, 150, 150, 200);
boolean result = line2.intersectsLine(line1);
System.out.println(result); // => true

// Also check out linesIntersect() if you do not need to construct the line objects
// It will probably be faster due to putting less pressure on the garbage collector
// if running it in a loop
System.out.println(Line2D.linesIntersect(100,100,200,200,150,150,150,200));

Если вам интересно узнать, как работает код, чтобы узнать, можете ли вы сделать это быстрее в своем конкретном домене, вы можете проверить код для реализации OpenJDK. Но помните, всегда профиль перед оптимизацией; это, вероятно, достаточно быстро, как есть.

Ответ 2

Я бы просто использовал метод, который делает это для вас, или посмотрите на его исходный код, если вы хотите его переопределить: Line2D.linesIntersect()