#[test] fn test() { assert_eq!(compute_area(-3, 0, 3, 4, 0, -1, 9, 2), 45); assert_eq!(compute_area(-2, -2, 2, 2, -2, -2, 2, 2), 16); } pub fn compute_area( ax1: i32, ay1: i32, ax2: i32, ay2: i32, bx1: i32, by1: i32, bx2: i32, by2: i32, ) -> i32 { let area1: i32 = (ax2 - ax1) * (ay2 - ay1); // 矩形1的面积 let area2: i32 = (bx2 - bx1) * (by2 - by1); // 矩形2的面积 // x方向相交的长度 let x: i32 = 0 // 两矩形不相交时,相交长度设为0 .max( // 相交长度=两矩形左边界中最小的-两矩形右边界中最大的 // 两矩形不相交时,该长度为负值,设为0 ax2.min(bx2) - ax1.max(bx1), ); // y方向相交的长度,与上面同理 let y: i32 = 0.max(ay2.min(by2) - ay1.max(by1)); area1 + area2 - (x * y) }