Определить, лежит ли угол между двумя другими углами

Я пытаюсь выяснить, лежит ли угол между двумя другими углами.Я пытался создать простую функцию для выполнения этого, но ни один из моих методов не будет работать для всех возможных значений углов.

Можете ли вы помочь мне отредактировать мою функцию, чтобы правильно определить, находится ли угол между двумя другими углами?

enter image description here

На картинке выше; Я использую зеленую точку в качестве центральной точки, затем определяю угол каждой линии к зеленой точке. Затем я вычисляю угол черной точки к зеленой точке. Я пытаюсь проверить, составляет ли угол черной точки МЕЖДУ углами двух линий.

ПРИМЕЧАНИЕ :В моем случае; Говорят, что угол (targetAngle )лежит между двумя другими углами, ЕСЛИ разница между двумя углами <180 градусов И targetAngle лежит в полости, образованной этими двумя углами.

Следующий код должен работать, но он не работает для (, которые лежат между углом):
-это _угол _между (150, 190, 110)
-это _угол _между (3, 41, 345)

bool is_angle_between(int target, int angle1, int angle2) 
{  
  int rAngle1 = ((iTarget - iAngle1) % 360 + 360) % 360;  
  int rAngle2 = ((iAngle2 - iAngle1) % 360 + 360) % 360;  
  return (0 <= rAngle1 && rAngle1 <= rAngle2);  
}  

// Example usage  
is_angle_between(3, 41, 345);  

Еще одна техника, которую я пробовал, тоже не работает:

int is_angle_between(int target, int angle1, int angle2)
{
  int dif1  = angle1-angle2;
  int dif2  = angle2-angle1;
  int uDif1 = convert_to_positive_angle( dif1 ); // for eg; convert -15 to 345
  int uDif2 = convert_to_positive_angle( dif2 );

  if (uDif1 <= uDif2) {
    if (dif1 < 0) {
      return (target <= angle1 && target >= angle2);
    }
    else return (in_between_numbers(iTarget, iAngle1, iAngle2));
  }
  else {
    if (dif2 < 0) {
      return (target <= angle1 && target >= angle2);
    }
    else return (in_between_numbers(iTarget, iAngle1, iAngle2));
  }

  return -1;
}
18
задан sazr 10 July 2012 в 03:29
поделиться