Мне нужна функция, чтобы зажать угол (в градусах) в произвольный диапазон [min,max]
. Вот несколько примеров: Угол зажима в произвольном диапазоне
Цветные области представляют собой допустимый диапазон углов.
- В изображении # 1, анг должна быть прижата к макс (-90)
- В изображении # 2, анг должна быть прижата к мин (135)
- в изображении # 3, анг должна быть прижата к мин (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
).
Каким будет самый простой способ определить, находится ли угол в пределах диапазона или нет?
Это звучит похоже на http://stackoverflow.com/questions/13652518/efficiently-find-points- внутри-круг-сектор? По крайней мере, математические требования. – Zze