2023.6.25 圆和矩形是否有重叠

发布时间 2023-06-25 16:41:23作者: 烤肉kr

image

原问题可以转换为,判断圆心到矩形的最短距离是否小于等于半径。
image
根据这张图,可以得到矩形到圆心的距离是\(\sqrt{x^2 + y^2}\),其中x和y分别是圆心和矩形的横纵坐标之差。

求横纵坐标之差其实也很简单,以横坐标为例,圆心的坐标为x,矩形的坐标是x1和x2。那么就是\(min(|x - x_1|, |x - x_2|)\)。纵坐标同理,可以使用一个函数clmap抽象这个行为。

impl Solution 
{
    pub fn check_overlap(radius: i32, x_center: i32, y_center: i32, x1: i32, y1: i32, x2: i32, y2: i32) -> bool 
    {
        pub fn clamp(input: i32, min: i32, max: i32) -> i32
        {
            if input < min { return min; }
            if input > max { return max; }
            input
        }

        let x = clamp(x_center, x1, x2) - x_center;
        let y = clamp(y_center, y1, y2) - y_center;
        if x * x + y * y <= radius * radius { return true; }
        false
    }
}