Как проверить, пересекаются ли 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()