1

互いに交差するのではなく、多くの異なる NSTextViews を含む 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];

ここで、「フレーム」は、NSTextViews の座標がクリアされ、交差していないと思われる座標を追加する配列です。'field' は NSTextField であり、'randomPoint' は NSTextField の配置がランダムになるように NSPoint をランダムに見つけるメソッドです。

何が起こるかというと、長方形の配列を繰り返し処理し、新しい長方形が交差していないことをそれぞれに対してチェックします。このテストに合格すると、彼自身が配列に入り、新しいテキスト フィールドが取り込まれます。

このアプローチの問題は、NSTextField が一度に 1 つの四角形に対してチェックされることです。実際、1 つの長方形と交差するのではなく、次の長方形と交差する可能性があります。残念ながら、座標が変更されると、最初の長方形と交差している間にテストに合格する可能性があります。

簡単にするために、オブジェクトが他の多くのオブジェクトと交差しているかどうかを同時にチェックする方法を知っている人はいますか、それとも私のコードを変更することは可能ですか? 2 つ以上の CGRect 間の交差をチェックすることは可能ですか?

4

1 に答える 1

3

ここで巧妙に示されているように: http://static.mrfeinberg.com/bv_ch03.pdf、私が使用していた方法で複数の長方形の交差をチェックしようとするのは愚かで非常に遅いようです。

はるかに複雑で精巧な答えがそのPDFに示されています.

于 2011-10-29T14:00:49.320 に答える