Вы не хотите сравнивать длины сегментов.
Кроме того, я предполагаю, что при сравнении intersection(A',B')
с intersection(B",A")
подразумевается, что координаты A'
равны в репрезентативном виде идентичны с A"
(то же самое для B'
и B"
), иначе решения не существует.
При этом рассмотрим отрезки [PQ]
и [RS]
, где P
, Q
, R
и S
- это точки на плоскости. Вы хотите пересечения отрезков:
[PQ]
[RS]
[QP]
[RS]
[PQ]
[SR]
[QP]
[SR]
[RS]
[PQ]
[SR]
[PQ]
[RS]
[QP]
[SR]
[QP]
... чтобы всегда возвращать одну и ту же пару координат.
Порядок, сначала из конечных точек на каждом сегменте, а затем самих сегментов (на основе конечной точки наименьшего каждого сегмента), является единственным решением, которое гарантирует воспроизводимые результаты. Сам порядок может быть вычислительно тривиальным, например, P<Q
если P.x < Q.x || P.x == Q.x && P.y < Q.y
, хотя ветвление может дорого обойтись, если иметь дело с миллионами сегментов (посмотрите, как можно использовать SIMD для замены координат сегмента на месте, если это возможно, для генерации порядка.)