我想创建一个存储颜色RGB值的简单结构.r,g和b应该是[0,1]中的双数.
struct Color
{
Color(double x): r{x}, g{x}, b{x} {
if (r < 0.0) r = 0.0;
if (r > 1.0) r = 1.0;
if (g < 0.0) g = 0.0;
if (g > 1.0) g = 1.0;
if (b < 0.0) b = 0.0;
if (b > 1.0) b = 1.0;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有比使用if语句更好的方法?
只需写一个功能来钳制:
double clamp(double val, double left = 0.0, double right = 1.0) {
return std::min(std::max(val, left), right);
}
Run Code Online (Sandbox Code Playgroud)
并在构造函数中使用它:
Color(double x)
: r{clamp(x)}
, g{clamp(x)}
, b{clamp(x)}
{ }
Run Code Online (Sandbox Code Playgroud)
您可以使用min并max理想地将它们组合成一个clamp函数:
template <class T>
T clamp(T val, T min, T max)
{
return std::min(max, std::max(min, val));
}
struct Color
{
Color(double x) : r{clamp(x, 0., 1.)}, g{clamp(x, 0., 1.)}, b{clamp(x, 0., 1.)}
{}
};
Run Code Online (Sandbox Code Playgroud)