2009-10-11 35 views
12

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.)

+0

Một hình chữ nhật nằm ngang là một hình chữ nhật đứng, phụ thuộc mà phụ –

+4

** if (overlap.IsEmpty) ** phải là ** if (! overlap.IsEmpty) ** – ReinierDG

Trả lời

11

Có lẽ tôi hiểu sai câu hỏi của bạn, nhưng không phương pháp Rectangle.Intersect thực hiện công việc? Nó trả về vùng giao nhau, và sau đó bạn có thể dễ dàng tính toán diện tích của nó.

+0

vâng, đó là hoàn hảo :). cảm ơn! – Evan

1

Nghe như Phát hiện va chạm cơ bản. bạn đã xem xét this page on Wikipedia?

Mike

chỉnh sửa: Fredrik làm cho phản ứng của mình tại cùng một thời điểm tôi làm thế này, câu trả lời của ông đã upvote của tôi (:

+0

Cảm ơn, tôi sẽ kiểm tra trang web! – Evan

Các vấn đề liên quan