Edit:Tìm các khu vực chồng lấn của hai hình chữ nhật (trong C#)
mã đơn giản tôi đã sử dụng để giải quyết vấn đề trong trường hợp bất cứ ai quan tâm đến (nhờ Fredrik):
int windowOverlap(Rectangle rect1, Rectangle rect2)
{
if (rect1.IntersectsWith(rect2))
{
Rectangle overlap = Rectangle.Intersect(rect1, rect2);
if (overlap.IsEmpty)
return overlap.Width * overlap.Height;
}
return 0;
}
Câu hỏi gốc:
Tôi muốn biết một cách nhanh chóng và bẩn để kiểm tra xem hai hình chữ nhật có trùng nhau không và liệu chúng có tính toán diện tích chồng lấp hay không. Đối với sự tò mò vì tôi quan tâm đến trường hợp 1) tất cả các dòng trong cả hai hình chữ nhật hoặc là dọc hoặc ngang hoặc 2) trường hợp chung cho bất kỳ hình chữ nhật nào, nhưng câu trả lời duy nhất tôi thực sự cần là case 1.
tôi đang suy nghĩ dọc theo dòng:
double areaOfOverlap(Rect A, Rect B)
{
if (A.Intersects(B))
{
// calculate area
// return area
}
return 0;
}
Đối A.Intersects() tôi đã nghĩ đến việc sử dụng các bài kiểm tra trục tách, nhưng nếu hình chữ nhật chỉ có đường ngang và dọc là có một thậm chí đơn giản hơn (nhanh hơn) cách kiểm tra?
Và để tính toán khu vực họ giao nhau là có cách nhanh chóng để làm điều đó nếu hình chữ nhật chỉ có đường ngang và dọc?
Cuối cùng, điều này không liên quan đến câu hỏi nhưng tôi đánh giá cao bất kỳ lời khuyên nào mà một người nào đó có thể có trên một cuốn sách/trang web tốt nơi tôi có thể xem lại toán học cho đồ họa máy tính. Tôi đã ra khỏi trường đại học một thời gian và cảm thấy như tôi quên tất cả mọi thứ :)! Bất cứ ai khác có vấn đề đó?
(Chú ý: Tôi tìm thấy câu hỏi này khác với this mà có vẻ phức tạp hơn và không trực tiếp trả lời các câu hỏi.)
Một hình chữ nhật nằm ngang là một hình chữ nhật đứng, phụ thuộc mà phụ –
** if (overlap.IsEmpty) ** phải là ** if (! overlap.IsEmpty) ** – ReinierDG