Tìm hình chữ nhật giao nhau của hai hình chữ nhật
Hình chữ nhật gồm 2 điểm: topRight
bottomLeft
Quy định hình chữ nhật
struct Point {
let x: Double
let y: Double
}
struct Rectangle {
let bottomLeft: Point
let topRight: Point
func isValidRectangle () -> Bool {
return (topRight.x - bottomLeft.x) * (topRight.y - bottomLeft.y) > 0
}
func intersect(with rec: Rectangle) -> Rectangle? {
//Todo
}
}
Khi nào 2 hình chữ nhật giao nhau:
((x1,y1), (x2,y2)) / ((a1,b1), (a2,b2)) ????????????
khi ngoại trừ 4 trường hợp không giao nhau sau:
Chúng ta trả về nil
cho 4 trường hợp trên, không thì trả về dựa vào min max ( xem đầu và một chút tưởng tượng :V)
func intersect(with rec: Rectangle) -> Rectangle? {
if (bottomLeft.y >= rec.topRight.y || topRight.y <= rec.bottomLeft.y)
{ return nil }
if (topRight.x <= rec.bottomLeft.x || bottomLeft.x >= rec.topRight.x)
{ return nil }
let firstPoint = Point(x: max(bottomLeft.x, rec.bottomLeft.x), y: max(bottomLeft.y, rec.bottomLeft.y))
let secondPoint = Point(x: min(topRight.x, rec.topRight.x), y: min(topRight.y, rec.topRight.y))
return Rectangle(bottomLeft: firstPoint, topRight: secondPoint)
}
Time to test: thử viết test class xem nào
struct TestIntersect {
let input1: (Double, Double, Double, Double)
let input2: (Double, Double, Double, Double)
let expect: (Double, Double, Double, Double)?
func test() -> Bool {
///yolooooo
}
}
Happy coding!