Один критический фрагмент кода в моем приложении включает перечисление всех прямоугольников на двумерной поверхности.Прямоугольники не пересекаются друг с другом, и я должен иметь возможность перечислять все прямоугольники в пределах данной прямоугольной границы.
У меня уже есть функция, которая возвращает прямоугольник для заданной координаты, если он существует
GetRectangle( int row, int col )
Вот как я бы назвал полученный код.
foreach( var rect in GetRectangles( row, col, rowCount, colCount ) ) {
//.. my processing code here
}
Очевидно, я мог бы вызвать функцию GetRectangle()
для каждой из точек на поверхности.Я также могу пропустить ширину прямоугольника, который был возвращен из предыдущего вызова, поскольку я знаю, что они не пересекаются.Но это все еще недостаточно эффективно.
Вам известен такой алгоритм?
ОБНОВЛЕНИЕ: Поверхность не обязательно покрыта прямоугольниками, но это может быть для некоторых особых случаев.Итак, функция GetRectangle( int row, int col )
может возвращать ноль.
Думайте о поверхности как о растровом изображении, заполненном случайными прямоугольниками (которые не пересекаются).Задача состоит в том, чтобы вернуть все прямоугольники на той поверхности, которая попадает в (т.е. пересекает) данный кадр.Надеюсь, что это прояснит вопрос.
Спасибо