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.
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
có khả năng tính toán góc của hình chữ nhật giao lộ không? –
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