Проверьте, пересекает ли CGRect массив прямоугольников - PullRequest
1 голос
/ 26 октября 2011

Я пытаюсь иметь NSView с множеством различных NSTextViews, не пересекающихся друг с другом. Сначала у меня появилась идея сделать следующее:

for (NSString *str in frames) {

        while (CGRectIntersectsRect(NSRectToCGRect(field.frame), NSRectToCGRect(NSRectFromString(str)))) {

            CGPoint origin = [self randomPoint];

            field.frame = CGRectMake(origin.x, origin.y, sizeOfButton.width, sizeOfButton.height);


        }

    }
        NSString *string = NSStringFromRect(field.frame);

        [frames addObject:string];

Здесь, 'frames' - это массив, к которому я добавляю координаты NSTextViews, когда они очищены и предположительно не пересекаются. 'field' - это NSTextField, а 'randomPoint' - это метод, который случайным образом находит NSPoint, так что размещение NSTextField является случайным.

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

Проблема с этим подходом состоит в том, что NSTextField проверяется по одному прямоугольнику за раз. Действительно, он может не пересекать один прямоугольник, но пересекать следующий, и, к сожалению, после изменения его координат он может пройти тест, хотя и пересек первый прямоугольник.

Теперь, для упрощения, кто-нибудь знает метод или можно ли изменить мой код, чтобы одновременно проверить, пересекается ли объект со многими другими объектами? Можно ли проверить пересечение между более чем 2 CGRects?

1 Ответ

2 голосов
/ 29 октября 2011

Как это умно продемонстрировано здесь: http://static.mrfeinberg.com/bv_ch03.pdf,, кажется глупым и удивительно медленным пытаться проверять наличие нескольких пересечений прямоугольника так, как я использовал.

Гораздо более сложный и продуманный ответ проиллюстрирован в этом PDF, что для меня совершенно излишне, но, возможно, это будет единственное решение в долгосрочной перспективе.

...