使用std::clamp函数判断圆和矩形是否重叠

1. 引言

在计算机编程中,我们经常需要解决各种几何形状的计算问题。在LeetCode的题目中,有一个问题要求我们判断给定的圆和矩形是否重叠。为了解决这个问题,我们可以利用C++标准库中的std::clamp函数来计算圆心到矩形的最小距离,并与圆的半径进行比较。本文将详细介绍std::clamp函数的用法,并结合给定的代码进行解析。

2. 题目描述

题目链接:Circle and Rectangle Overlapping

给定一个圆的半径、圆心的坐标,以及一个矩形的左下角和右上角坐标,判断圆和矩形是否重叠。如果重叠,返回true;否则,返回false。

给定的函数原型如下:

class Solution {
public:
    bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
        //圆心到区域【x1,x2】的最小值
        int x = std::clamp(xCenter,x1,x2)-xCenter;
        //圆心到区域【y1,y2】的最小值
        int y = std::clamp(yCenter,y1,y2)-yCenter;
        //圆心到矩形的最短距离与半径比较
        return x*x+y*y<=radius*radius;
    }
};

3. std::clamp函数的介绍

std::clamp函数是C++标准库中的一个函数模板,用于限制给定值的范围在指定的上下限之间。它的定义如下:

template< class T >
constexpr const T& clamp( const T& value, const T& lo, const T& hi );

std::clamp接受三个参数:value、lo和hi。它返回一个被限制在[lo, hi]范围内的值。如果value小于lo,则返回lo;如果value大于hi,则返回hi;否则返回value。

4. 使用std::clamp函数判断圆和矩形是否重叠

在给定的代码中,我们使用std::clamp函数来计算圆心到给定区域的最小值。具体而言,我们分别计算圆心到区域的x轴和y轴的最小值。

首先,我们计算圆心到区域[x1, x2]的最小值:

int x = std::clamp(xCenter, x1, x2) - xCenter;

这里,std::clamp(xCenter, x1, x2)会返回xCenter在[x1, x2]范围内的值,然后我们从该值中减去xCenter,得到圆心到x轴边界的最小值x。

扫描二维码关注公众号,回复: 17256955 查看本文章

接下来,我们计算圆心到区域[y1, y2]的最小值:

int y = std::clamp(yCenter, y1, y2) - yCenter;

同样地,std::clamp(yCenter, y1, y2)会返回yCenter在[y1, y2]范围内的值,然后我们从该值中减去yCenter,得到圆心到y轴边界的最小值y。

最后,我们使用勾股定理计算圆心到矩形的最短距离,即x * x + y * y,然后将其与半径的平方进行比较。如果圆心到矩形的最短距离小于等于半径的平方,则认为圆和矩形有重叠,返回true;否则,返回false。

5. 总结

本文介绍了如何使用C++标准库中的std::clamp函数来判断给定圆和矩形是否重叠。我们首先了解了题目的描述,然后详细介绍了std::clamp函数的用法。最后,结合给定的代码,我们展示了如何利用std::clamp函数来计算圆心到矩形的最小距离,并与半径进行比较,从而得出重叠与否的判断结果。

std::clamp函数是一个非常方便的工具,可以帮助我们限制值的范围,避免手动编写繁琐的逻辑判断语句。在处理各种计算问题时,我们可以充分利用C++标准库中提供的函数模板,提高代码的可读性和可维护性。

猜你喜欢

转载自blog.csdn.net/bigBbug/article/details/131374277
今日推荐