原问题可以转换为,判断圆心到矩形的最短距离是否小于等于半径。
根据这张图,可以得到矩形到圆心的距离是\(\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
}
}
标签:25,center,min,i32,圆心,2023.6,input,矩形
From: https://www.cnblogs.com/st0rmKR/p/17503272.html