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