确定角度是否在2个其他角度之间 [英] Determine if angle lies between 2 other angles
问题描述
我想知道一个角度是否在2个其他角度之间。我一直在尝试创建一个简单的函数来执行这个,但我的技术都不能用于所有可能的角度值。
I am trying to figure out whether a angle lies between 2 other angles. I have been trying to create a simple function to perform this but none of my techniques will work for all possible values of the angles.
你能帮我编辑我的功能可以正确判断角度是否在其他两个角度之间?
在上图中;我使用绿色点作为中心点,然后我确定每条线到绿色点的角度。然后我计算黑点到绿点的角度。我想检查黑点的角度是否 BETWEEN 两行的角度。
In the above picture; I use the green point as the central point, then I determine the angle of each line to the green point. I then calculate the angle of the black point to the green point. I am trying to check if the angle of the black dot is BETWEEN the 2 lines' angles.
注意:在我的情况下;角度(targetAngle)被认为位于2个其它角度之间,如果2个角度之间的差值< 180度,并且targetAngle在由这两个角度形成的空腔中。
以下代码应该工作,但它们失败角度):
- is_angle_between(150,190,110)
- is_angle_between(3,41,345)
The following code should work but it fails for these(which do lie between the angle):
- 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);
我尝试的另一种技术也不起作用:
Another technique I attempted which also doesn't work:
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;
}
推荐答案
bool is_angle_between(int target, int angle1, int angle2)
{
// make the angle from angle1 to angle2 to be <= 180 degrees
int rAngle = ((angle2 - angle1) % 360 + 360) % 360;
if (rAngle >= 180)
std::swap(angle1, angle2);
// check if it passes through zero
if (angle1 <= angle2)
return target >= angle1 && target <= angle2;
else
return target >= angle1 || target <= angle2;
}
这篇关于确定角度是否在2个其他角度之间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!