Как проверить, перекрываются ли две «линии»? - PullRequest
0 голосов
/ 09 апреля 2019

Я знаю, это глупый вопрос, но мне нужно проверить, не перекрываются ли два периода времени (в epoch) друг с другом.Я просто не знаю, будет ли этих проверок достаточно.

TLPeriod.prototype.isOverlapping = function(period) {
    if( period.toPoints().start.getEpoch() < this.toPoints().start.getEpoch()
        &&
        this.toPoints().start.getEpoch() < period.toPoints().end.getEpoch())
        return true;
    if(this.toPoints().end.getEpoch() > period.toPoints().start.getEpoch())
        return true;
    return false;
};

Я знаю, я должен написать здесь , но для ответа потребуется много времени.

Его можно быстро суммировать следующим образом:

Две линии на на одной оси с точками:

| (this.start), (this.end) |

&

| (period.start), (period.end) |

Как проверить, если ониперекрытия?

OVERLAP!
|-----------|-----------------|-------------|
this.start  period.start     this.end     period.end

NO OVERLAP!
|-----------|              |-------------|
this.start  this.end     period.start  period.end

OVERLAP!
|-----------------|--------|-------------|
period.start  this.start  this.end     period.end

1 Ответ

1 голос
/ 09 апреля 2019

Противоположный вопрос: когда они не перекрываются?Ответ: когда первый начинается после окончания второго, или когда второй начинается после окончания первого.Итак

TLPeriod.prototype.isOverlapping = function(period) {
   return !(
      period.toPoints().start.getEpoch() > this.toPoints().end.getEpoch() ||
      this.toPoints().start.getEpoch() > period.toPoints().end.getEpoch()
   );
}
...