Это намного сложнее, чем может показаться на первый взгляд. У меня есть гигантский массив, который состоит из большего количества массивов, которые содержат точки [в форме массива "x, y"], например, так:
Array (
[0] => Array (
[0] => "0,9",
[1] => "0,0",
[2] => "9,0",
[3] => "9,9",
[4] => "0,9"
)
[1] => Array (
[0] => "1,5",
[1] => "1,6",
[2] => "3,6",
[3] => "3,8",
[4] => "4,8"
)
... and so on ...
)
Итак, мне нужно обработать все точки и посмотреть, пересекается ли любая точка массива, скажем, от $points[0][1]
до $points[0][2]
, с любым другим отрезком линии, который может существовать в массиве. Все линейные сегменты расположены последовательно в том порядке, в котором они находятся в каждом из соответствующих массивов. Таким образом, в первом массиве «0,9» переходит в «0,0», и никакой другой точки в этом массиве. Последняя точка в массиве не возвращается к первой точке в массиве. Кроме того, его не следует рассматривать как пересечение, если отрезок линии заканчивается на пересечении другого отрезка, ему фактически нужно пересечь отрезок, который он пересекает.
Я думал о том, чтобы построить сегменты по мере их обработки. Так, как пробежаться по массивам, строящим каждую точку на «виртуальной» сетке, скажем, а затем каждый массив после этого будет вычисляться, если он пересекает другой сегмент, который уже нанесен, если это имеет какой-то смысл, но все равно кажется, что это может занять в то время как для расчета, если в массиве много отрезков. Похоже, что я буду делать для каждого сегмента в массиве, рассчитать, если он пересекает какие-либо сегменты, предшествующие ему (потому что теоретически он может пересекать сегмент в том же массиве, в котором он находится). Должен быть более простой способ сделать это, верно?
P.S. Я не мог придумать, к каким тегам это относится, кроме PHP. Если вы думаете о чем-либо, пожалуйста, не стесняйтесь пометить его.