Проверка на пересечение линейных интервалов времени

При работе с интервалами времени часто встает проблема определения их пересечения. Так как же максимально просто и правильно это определить?

Обычно начинающие программисты используют для этого избыточное количество условий.
На самом деле всё довольно просто. Попробуем разобраться на примере.

Временные интервалы

Дано два интервала:

  1. a1…a2
  2. b1…b2

Посмотрим сразу на формулу сравнения: a1<=b2 && a2>=b1

На вид всё просто, но на первый взгляд формула может показаться не логичной. Чтобы разобраться нужно пойти от обратного. Для этого необходимо написать условие для не пересекающихся интервалов:

a1>b2 ИЛИ a2<b1

Не пересекающиеся интервалы — это когда начало одного интервала больше конца другого интервала, или конец одного интервала меньше начала другого.

Тогда пересечение — это обратное от не пересечения:

НЕ (a1>b2 ИЛИ a2<b1)

Теперь осталось раскрыть скобки по правилам булевой алгебры и получим условие для проверки пересекающихся интервалов:

a1<=b2 И a2>=b1

В программном коде формула проверки пересекающихся периодов:

a1<=b2 && a2>=b1

Эта формула считает, что интервалы [1,5] и [5,10] будут пересекаться. Если требуется, чтобы исключить границы пересечена, то формула изменит вид на:

a1<b2 && a2>b1

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *