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