Этот вопрос связан с:
- Как определить точку пересечения двух строк в GDI +? (отличное объяснение алгебры, но без кода)
- Как вы обнаруживаете, где пересекаются два сегмента линии? (принятый ответ фактически не работает)
Но обратите внимание, что интересная подзадача полностью затухает в большинстве решений, которые просто возвращают null для совпадающего случая, даже если есть три подсекции:
- совпадающие, но не перекрывающиеся
- касание только точек и совпадений
- сегмент перекрытия/совпадающей строки
Например, мы могли бы создать функцию С# следующим образом:
public static PointF[] Intersection(PointF a1, PointF a2, PointF b1, PointF b2)
где (a1, a2) - один отрезок линии и (b1, b2) - другой.
Эта функция должна охватывать все странные случаи, когда большинство реализаций или объяснений затухают. Чтобы учесть странность совпадающих строк, функция могла возвращать массив объектов PointF:
- нулевые точки результата (или нуль), если строки параллельны или не пересекаются (бесконечные линии пересекаются, но сегменты линии не пересекаются, или строки параллель)
- одна точка результата (содержащая местоположение пересечения), если они пересекаются или если они совпадают в одной точке
- две точки результата (для перекрытия части сегментов линии), если две строки совпадают