0

open の配列がありますNSWindow。これらのいずれかが交差しているかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

1

徹底的な検索以外にそれを行う方法があるかどうかはわかりません。2 つのコーナー (ウィンドウの位置を確認することによって返される参照コーナー、および反対側のコーナー、または参照コーナーにウィンドウの寸法を加えたもの) を使用し、各ウィンドウについて、他のウィンドウのいずれかのコーナーがあるかどうかを確認できます。現在のウィンドウのコーナーの間。この徹底的なアプローチは O(n^2) ですが、数千のウィンドウを扱っていない限り、それでも非常に高速です。

擬似コード:

inside (point, window):
    if  point.x less than window.corner1.x and point.x greater than window.corner2.x
    and point.y less than window.corner1.y and point.y greater than window.corner2.y,
        true.
    false.

check_for_collision (window1, window2):
    if (window1.corner1 inside window2) or (window1.corner2 inside window2), true.
    else if window2.corner1 inside window1 or window2.corner2 inside window1, true.
    otherwise, false.

check_group_of_windows (windowlist):
    loop:
        if size of windowlist is 1 or less, stop looping
        let window be windowlist.pop
        for each otherwindow in windowlist:
            if check_for_collision(window, otherwindow), true.
    false.

それが意味をなすことを願っています。

于 2012-06-18T20:03:13.933 に答える