Określ, czy kąt leży między 2 innymi kątami

Próbuję ustalić, czy kąt leży między 2 innymi kątami. Próbowałem stworzyć prostą funkcję do wykonania tego, ale żadna z moich technik nie będzie działać dla wszystkich możliwych wartości kątów.

Czy możesz pomóc mi edytować moją funkcję, aby poprawnie określić, czy kąt leży między 2 innymi kątami?

Na powyższym zdjęciu; Używam zielonego punktu jako punktu centralnego, a następnie określam kąt każdej linii do zielonego punktu. Następnie obliczam kąt czarnego punktu do zielonego punktu. Próbuję sprawdzić, czy kąt czarnej kropki jestPOMIĘDZY kąty 2 linii.

UWAGA: W moim przypadku; mówi się, że kąt (targetAngle) leży pomiędzy 2 innymi kątami JEŚLI różnica między 2 kątami wynosi <180 stopni ORAZ cel Kąt leży we wnęce utworzonej przez te 2 kąty.

Poniższy kod powinien działać, ale nie działa dla tych (które znajdują się między kątem):
- is_angle_between (150, 190, 110)
- is_angle_between (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);  

Inna technika, którą próbowałem, która również nie działa:

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;
}

questionAnswers(12)

yourAnswerToTheQuestion