Trừ từ Rect-lớp học của tôi:Cách nhanh hơn để kiểm tra hình chữ nhật giao nhau?
public class Rect {
public int x;
public int y;
public int w;
public int h;
public Rect(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
...
}
Tôi có một phương pháp để kiểm tra xem hai giao cắt dễ phân biệt (không có ý định chơi chữ):
public boolean intersect(Rect r) {
return (((r.x >= this.x) && (r.x < (this.x + this.w))) || ((this.x >= r.x) && (this.x < (r.x + r.w)))) &&
(((r.y >= this.y) && (r.y < (this.y + this.h))) || ((this.y >= r.y) && (this.y < (r.y + r.h))));
}
Kiểm tra trường hợp:
r1 = (x, y, w, h) = (0, 0, 15, 20) center: (x, y) = (7, 10)
r2 = (x, y, w, h) = (10, 11, 42, 15) center: (x, y) = (31, 18)
r1 Intersect r2: true
Các lớp học hoạt động tốt.
Điều tôi đang tự hỏi là liệu có cách nào khác - có lẽ nhanh hơn - cách kiểm tra xem các hình chữ nhật có giao nhau hay không. Tôi có thể tối ưu hóa nó theo một cách nào đó không?