Я пытаюсь выяснить, находится ли угол между двумя другими углами. Я пытаюсь создать простую функцию для этого, но ни один из моих методов не будет работать для всех возможных значений углов.
Можете ли вы помочь мне изменить мою функцию, чтобы правильно определить, находится ли угол между двумя другими углами?
На приведенном выше рисунке; Я использую зеленую точку в качестве центральной точки, затем определяю угол каждой линии на зеленую точку. Затем я вычисляю угол черной точки на зеленую точку. Я пытаюсь проверить, является ли угол черной точки МЕЖДУ двумя углами линии.
ПРИМЕЧАНИЕ. В моем случае; угол (targetAngle), как говорят, лежит между двумя другими углами, ЕСЛИ разница между двумя углами равна < 180 градусов и TargetAngle лежит в полости, сделанной этими двумя углами.
Следующий код должен работать, но он не подходит для них (которые лежат между углом):
- 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);
Другой метод, который я попытался, который также не работает:
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;
}