2014-11-26 20 views
7

enter image description hereTính diện tích chồng lấn giữa hai hình chữ nhật

Tôi muốn tính diện tích chồng chéo "The Grey KHU VỰC" giữa hình chữ nhật màu đỏ và màu xanh.

Mỗi hình chữ nhật được xác định bởi bốn tọa độ góc của nó. Đơn vị kết quả của vùng chồng chéo là đơn vị vuông.

Tôi không thể tưởng tượng làm thế nào tôi có thể làm điều đó?

Bất kỳ nhận xét quảng cáo nào sẽ được đánh giá cao.

+2

Vậy vấn đề của bạn chính xác là gì? Nếu bạn biết tất cả các điểm góc, bạn có thể dễ dàng tính toán góc của hình chữ nhật giao nhau. Các tọa độ góc và các hàm 'min' và' max' phải là tất cả những gì bạn cần. – cel

+0

có khả năng tính toán góc của hình chữ nhật giao lộ không? –

+0

Tôi không biết điều đó. Tuy nhiên, tôi khá chắc chắn bạn có thể tìm ra cách bạn có thể tính toán những góc trên của riêng bạn. Chỉ cần nhìn vào góc trên bên trái: Để được trong giao lộ, bạn phải có một x_coord ít nhất là lớn như tối đa của kết thúc trái màu đỏ và màu xanh và một y_coord ở tối thiểu các đầu trên của màu đỏ và màu xanh ... bạn có các đối số tương tự cho mỗi điểm trong bốn điểm. – cel

Trả lời

17

Loại giao lộ này được thực hiện dễ dàng theo ý tưởng "phút tối đa" và "tối đa của phút". Để viết nó ra người ta cần một khái niệm cụ thể cho hình chữ nhật, và, chỉ để làm cho mọi việc rõ ràng tôi sẽ sử dụng một namedtuple:

from collections import namedtuple 
Rectangle = namedtuple('Rectangle', 'xmin ymin xmax ymax') 

ra = Rectangle(3., 3., 5., 5.) 
rb = Rectangle(1., 1., 4., 3.5) 
# intersection here is (3, 3, 4, 3.5), or an area of 1*.5=.5 

def area(a, b): # returns None if rectangles don't intersect 
    dx = min(a.xmax, b.xmax) - max(a.xmin, b.xmin) 
    dy = min(a.ymax, b.ymax) - max(a.ymin, b.ymin) 
    if (dx>=0) and (dy>=0): 
     return dx*dy 

print area(ra, rb) 
# 0.5 

Nếu bạn không thích các ký hiệu namedtuple, bạn chỉ có thể sử dụng:

dx = max(a[0], b[0]) - min(a[2], b[2]) 

v.v. hoặc bất kỳ ký hiệu nào bạn thích.

+0

cảm ơn được chấp nhận, nhưng mã của bạn vẫn hoạt động ngay cả khi đa giác màu xanh ở bên trái của đa giác màu đỏ? –

+0

@just: Vâng, nó hoạt động theo một trong hai cách. Sử dụng phương pháp tiếp cận tối đa và tối thiểu chỉ là một cách dễ dàng về những gì nếu không sẽ là một tập hợp các điều kiện phức tạp để xác định các vị trí tương đối. Tức là, đọc 'max (a.xmin, b.xmin)' là "góc trên cùng bên trái", v.v. Ngoài ra, tôi đã thay đổi câu trả lời của mình để bao gồm trường hợp khi các hình chữ nhật không giao nhau. – tom10

+0

cảm ơn, tôi hiểu rồi. –

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