コード例 #1
0
  /**
   * Этот метод выполняет шаг группирования.
   *
   * @return boolean TRUE, если объединение объектов произошло.
   */
  private boolean groupByIntersectionStep() {

    int i = 0;

    while (i < objects.size() - 1) {

      int j = i + 1;

      while (j < objects.size()) {

        // Есть два прямоугольника (объекта)

        Rectangle a = objects.get(i).rectangle;
        Rectangle b = objects.get(j).rectangle;

        // Проверяем, пересекаются ли они

        if (a.intersect(b)) {

          // Рассчитываем площадь пересечения

          final double s = a.intersection(b).getSquare();

          // Нас интересует относительная величина

          final double f = Math.max(a.getSquare() / s, b.getSquare() / s);

          // Проверяем порог

          if (f > params.intersectionThreshold) {

            // Выбираем победителя

            if (objects.get(i).score > objects.get(j).score) {

              // Победил A

              objects.remove(j);

            } else {

              // Победил B

              objects.remove(i);
            }

            return true;
          }
        }

        j++;
      }

      i++;
    }

    return false;
  }