找出角度是否在两点之间

时间:2011-02-26 09:06:23

标签: math geometry

这基本上只是一个数学问题。

以下是我遇到麻烦的事情......我很难想出如何表达这个问题,所以请耐心等待。基本上我认为我需要使用一些高级数学来实现这一目标,但我不知道我需要什么。

我会用一些插图来说明这一点。垃圾邮件预防不允许我发布图片......这是一个简单的概念图像:http://radleygh.com/images/gimp-2_2011-057-00-57-26-40.bmp

目标:确定多个对象是否位于2D平面上的圆锥内

锥形属性: 位置(x,y) 角度(0-359) 点差(0-359,又名宽度) 距离(0 ++)

我可以使用一点点数学来判断褐色线条:

Angle_A =角度+(Spread / 2) Angle_B =角度 - (Spread / 2) Angle_Target = Point_Direction(origin,object_position)

现在我想用一个简单的if / then语句将它们与每个对象的位置进行比较:

如果(Angle_A> Angle_Target)&& (Angle_B< Angle_Target)然后 Angle_Target介于A和B之间

这可行...直到Angle_A或Angle_B传递0-360阈值。 0 *介于45 *和315 *之间......但上述if语句不起作用。然后我们可以根据锥体的大小确定要检查的方向......

如果锥形效果大于180 *锥形怎么办?

我不确定答案。我很确定我应该使用Radians ......但我不理解Radians的概念。如果有人可以指出我正确的方向,或许在某个地方给我一个例子,那将是美好的!

我会在同一时间继续做自己的研究。

2 个答案:

答案 0 :(得分:2)

您可以考虑一个简单的变换,它将您的坐标系设置为Angle_B为零。换句话说,而不是测试

Angle_B < Angle_Target < Angle_A

您也可以使用

0 < Angle_Target - Angle_B < Angle_A - Angle_B

如果你对所有术语应用360度模数,你的逻辑就应该有效:

0 < (Angle_Target - Angle_B) % 360 < (Angle_A - Angle_B) % 360

答案 1 :(得分:0)

一个弧度是通过跟踪圆的圆周长度等于圆的半径而产生的角度。因此,圆圈中恰好有2 *个PI弧度。

所以2 * PI弧度= 360度

所以要将度数转换为弧度,乘以2 * PI,然后除以360.(或者当然,乘以PI,除以180)。

但是,无论您是以弧度还是以度为单位工作,都只能由您正在使用的库来决定。即便如此,您也可以编写执行上述计算的包装器。

但是问题的主要部分。考虑一下:

sin(theta)= sin(360 + theta)。

cos(theta)= cos(360 + theta)。

因此,如果您遇到经过0度的锥体,只需在锥体的两个角度上添加360.

e.g。如果您的锥体从-10到+20,则只需使用350到380。 当然,当你测试一个角度时,一定要加上360并测试原始和增加的角度。

e.g。测试+5(在你的锥体中),你将测试5(失败)然后365(经过)。

祝你好运!