在C或C++中是否有一个函数可以对整数进行"饱和"

lms*_*lms 8 c c++

我正在做一些3D图形,我有一个开放的海洋.对于这个海洋,我有一个矩阵代表海洋的特定矩形分段的海洋状态(即波浪高度).其余的海洋是平坦的.我的问题是,我的受控海域,有波浪,位于开阔的平坦海域中间,我的网格边缘的不连续性会造成一些不好的瑕疵.我只为一个分段而不是整个海洋产生波浪的原因是因为我的噪音功能在整个海域计算成本过高(而且我知道最简单的解决方案是使用更便宜的噪声功能,如单纯噪声,但这不是一个选项).

说完我的问题非常简单.如果说我有一个大小为100x40的网格(也称为矩阵又名2d数组),并且我想找到位置120x33的值,我只想取最近的邻居,即100x33.因此,对于任何位于给定范围之外的数字,我希望该数字在给定范围内饱和.C或C++中是否有一个函数可以做到这一点?

编辑:位置参数的类型为float

我知道我可以用一些简单的if语句来做到这一点,但它似乎就像标准库所包含的那样.

eta*_*ion 9

template<typename T>
T saturate(T val, T min, T max) {
    return std::min(std::max(val, min), max);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果val已经遭受基本类型T的溢出/溢出,则无法工作. (12认同)

Que*_*tin 7

现在有的形式std::clamp。而且我几乎没有迟到七年:)