高速矩形交差判定
自分はいつも、
private boolean isCross(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { return ((x1 + w1 > x2) && (x1 < x2 + w2) && (y1 + h1 > y2) && (y1 < y2 + h2)); }
こうやって書いていたんですが、これより速い判定方法があるとのこと。
こんな判定文。
private boolean isCross(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { return (((x1 - x2 - w2) & (x2 - x1 - w1) & (y1 - y2 - h2) & (y2 - y1 - h1)) < 0); }
それぞれの4つの条件が全てマイナスだったときに、trueを返すようになってます。
確かにこっちのほうが高速っぽいですね。
……でも、Javaだとほとんど変わらないんだろなぁ……(;´Д`)
Cだったら、0より小さいかどうかを判定するのではなく、右に31bitシフトして返すと更に高速に。
return (((DWORD)((x1 - x2 - w2) & (x2 - x1 - w1) & (y1 - y2 - h2) & (y2 - y1 - h1))) >> 31);