/** * Этот метод выполняет шаг группирования. * * @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; }