我有3个角度a b c
α= 315 B = 20 C = 45
好的,如果b介于a和c之间,那么想知道给所有三个
我有很长的路要做这个加法和减法似乎有效。我希望得到一些更小,更高效的东西。
感谢
修改
这是我想说的图片。
好的我有角度L(当前为0)我加45(或任意角度)并减去45(或任何角度)得到a和b(我的视角)。
现在我需要知道绿点是否在a和b之间
(g> a || g> 0)&& (g
所以在这张照片中只有顶部的绿点才是真的..
对不起,如果我不清楚我的第一语言不是英语
答案 0 :(得分:3)
我有类似的问题。我知道了。所有计算均以度为单位。 我需要计算一个gps位置在矩形内的id。
或者,我需要查看角度x
是否在角度check+r
和角度check-r
之间。
check-r<x<check+r
。
如果您需要a<x<b
,请在check
和a
的中间找到角度b
,然后找到{{1}的距离(r
)来自check
或a
。
方法标准化,将角度从-infinity ... infinity更改为-180 ... 180。
方法检查,获取参数
b
:我们需要查看角度check-r和check + r之间的角度。
x
:要检查的角度。
check
:角度检查的半径。
r
答案 1 :(得分:1)
1 st off,每个角度都在两个其他角度之间,你真正要问的是:
你可以直接将 a 定义为最左边的角度,将 b 定义为最右边的角度,或者你可以解决这个问题,例如,如果这些陈述中的任何一个是true a 是你最左边的角度:
为简单起见,我们说最左边的角度是 l ,最右边的角度是 r ,你试图找出 g 是他们之间。
这里的问题似乎是。我们正在寻找基本上3个阳性病例:
如果你只是将 a 定义为最左边,而将 b 定义为最右边,那么你就完成了,你的情况将会是这样的:
a <= g && g <= b ||
a <= g && b < a ||
g <= b && b < a
如果你计算了 l 和 r ,你会发现这里有一个优化机会同时进行这两个过程。你的功能如下:
if(a <= b) {
if(b - a <= PI) {
return a <= g && g <= b;
} else {
return b <= g || g <= a;
}
} else {
if(a - b <= PI) {
return b <= g && g <= a;
} else {
return a <= g || g <= b;
}
}
或者,如果你需要它,你可以扩展到这个噩梦般的条件:
a <= b ?
(b - a <= PI && a <= g && g <= b) || (b - a > PI && (b <= g || g <= a)) :
(a - b <= PI && b <= g && g <= a) || (a - b > PI && (a <= g || g <= b))
请注意,所有这些数学都假设您的输入是弧度,范围是[0:2π]。
答案 2 :(得分:0)
我个人最近遇到了同样的问题,并找到了所有已发布答案的反例,因此我将分享自己的方法。
假设a
为起始角度,b
为终止角度,我们正在检查c
是否在顺时针方向之间,这意味着从a
到{{1} },您必须通过b
。当c
在数值上大于c
时,检查a
是否在b
到b
范围内的方法会给您带来误报。例如:
a
,这意味着a=80°, b=320° and c=150°: a <= c <= b
在c
和a
之间。
但这不是。
有效的方法是,如果b
大于b
,则从a
中减去360;如果c
大于c
,则从a
中减去360。然后检查是否为a <= c <= b
。
在Java中:
public static boolean isBetween(double c, double a, double b) {
if (b > a) b -= 360;
if (c > a) c -= 360;
return a <= c && c <= b;
}
这假设a,b和c的范围是0到360。
一些例子:
isBetween(150, 80, 320) => false
isBetween(30, 80, 320) => true
isBetween(340, 80, 320) => true
isBetween(140, 0, 160) => true
isBetween(180, 0, 160) => false
答案 3 :(得分:-1)
假设a > c
,您实际上会使用:
( b < a ) && ( b > c )
这与检查值是否在下限和上限之间相同。它们是角度没有区别,除非你想要考虑这样一个事实:当你围绕一个圆圈时,405
的角度与45
的角度相同。在这种情况下,您只需使用a % 360
即可获得0
和360
之间的角度。
答案 4 :(得分:-2)
检查:
(如果你的意思是介于两者之间,不包括边界)
(c - a) % 180 > 0 && b > a && b < c
(如果你的意思是介于两者之间,包括边界)
(c - a) % 180 >=0;b >= a && b <= c
(这个答案假定a,b,c> = 0; a,b,c <360; a&lt; = c)