/**
  * @param Point                  $lowerLeft
  * @param Point                  $upperRight
  * @param ValueProvider|callable $valueProvider
  */
 public function __construct(Point $lowerLeft, Point $upperRight, $valueProvider = null)
 {
     parent::__construct($valueProvider);
     if ($lowerLeft->isRight($upperRight) || $lowerLeft->isAbove($upperRight)) {
         throw new \InvalidArgumentException('First point must not be right or above of the second point');
     }
     $this->lowerLeft = $lowerLeft;
     $this->upperRight = $upperRight;
 }