检查CGRect是否与矩形数组相交

时间:2011-10-25 23:55:03

标签: objective-c intersection cgrect

我正在尝试在其中安装许多不同的NSTextView的NSView,而不是相互交叉。起初,我有想法做以下事情:

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。实际上,它可能不会与一个矩形相交,而是与下一个矩形相交,不幸的是,一旦其坐标被修改,它就可以通过测试,同时与第一个矩形相交。

现在,为了简化,有没有人知道某个方法,或者是否可以更改我的代码,同时检查一个对象是否与许多其他对象相交?是否可以检查两个以上CGRects之间的交叉点?

1 个答案:

答案 0 :(得分:2)

正如在这里巧妙地证明的那样:http://static.mrfeinberg.com/bv_ch03.pdf,尝试以我使用的方式检查多个矩形交叉点似乎是愚蠢而且非常慢。

PDF中说明了一个更为复杂和精细的答案,这对我来说完全有点过头了,但从长远来看它可能是唯一的解决方案。