我需要一个函数来将角度(以度为单位)钳制到任意范围[min,max].这里有些例子:
彩色区域代表有效角度范围.
>在图像#1中,ang应该被夹紧到最大值(-90)
>在图像#2中,ang应夹紧到最小值(135)
>在图像#3中,ang应夹紧到最小值(135)
这是我到目前为止:
static float clamp_angle(float ang,float min,float max)
{
ang = normalize_angle(ang); // normalize_angle transforms angle into [-180,180) range
min = normalize_angle(min);
max = normalize_angle(max);
if(angle_in_range(ang,min,max) == false)
{
if(abs(get_angle_difference(ang,min)) < abs(get_angle_difference(ang,max))
ang = min; // Clamp to min if we're closer to min than max
else
ang = max;
}
return ang;
}
我缺少的是函数angle_in_range(如果角度在范围内,则为true,否则为false).
确定角度是否在范围内的最简单方法是什么?
最佳答案 您可以将角度标准化为ang变为0,min和max映射到[-180; 180).然后你可以检查角度是否在提供的范围内,如下所示:
float clamp_angle(const float ang, const float min, const float max)
{
float n_min = normalize180(min-ang);
float n_max = normalize180(max-ang);
if (n_min <= 0 && n_max >= 0)
{
return ang;
}
if (abs(n_min) < abs(n_max))
return min;
return max;
}