gpt4 book ai didi

c++ - 确定角度是否位于其他两个角度之间

转载 作者:IT老高 更新时间:2023-10-28 22:12:31 25 4
gpt4 key购买 nike

我试图弄清楚一个角度是否位于其他两个角度之间。我一直在尝试创建一个简单的函数来执行此操作,但我的任何技术都不适用于所有可能的角度值。

您能帮我编辑我的函数以正确确定一个角度是否位于其他 2 个角度之间吗?

enter image description here

在上图中;我使用绿点作为中心点,然后确定每条线与绿点的角度。然后我计算黑点到绿点的角度。我正在尝试检查黑点的角度是否在 BETWEEN 两条线的角度。

注意:就我而言;如果两个角度之间的差 < 180 度并且 targetAngle 位于这两个角度形成的空腔中,则称一个角度(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;
}

最佳答案

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

关于c++ - 确定角度是否位于其他两个角度之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com