我有一个打开的NSWindow数组。如何检查这些交叉点是否存在?

最佳答案

除了详尽的搜索之外,我不确定是否有其他方法可以做到这一点。您可以使用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.


我希望这是有道理的。

关于macos - 如何检查 window 是否相交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11089946/

10-11 19:47