【问题标题】:Finding if an angle lies between two points判断一个角度是否在两点之间
【发布时间】:2011-02-26 17:25:40
【问题描述】:

这基本上只是一道数学题。

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

我将使用一些插图来说明这一点。 防止垃圾邮件让我无法发布图片...不过,这是一个简单的概念图: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 在 A 和 B 之间

这有效...直到 Angle_A 或 Angle_B 通过 0-360 阈值。 0* 介于 45* 和 315* 之间……但上面的 if 语句不起作用。然后我们可以根据圆锥的大小来确定检查哪个方向...

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

我不确定答案。我很确定我应该使用弧度......但我不明白弧度的概念。如果有人能指出我正确的方向,或许可以在某个地方给我举个例子,那就太好了!

与此同时,我将继续进行自己的研究。

【问题讨论】:

    标签: math geometry


    【解决方案1】:

    您可以考虑一个简单的变换,它设置您的坐标系,使 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
    

    【讨论】:

      【解决方案2】:

      一个弧度是由一个圆的圆周沿等于该圆的半径的长度所形成的角度。因此,一个圆中正好有 2*PI 弧度。

      所以 2*PI 弧度 = 360 度

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

      但是,您是否使用弧度或度数只应由您使用的库决定。即使这样,您也可以编写执行上述计算的包装器。

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

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

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

      等等

      因此,如果您遇到经过 0 度的圆锥体,只需将 360 度添加到圆锥体的两个角度即可。

      例如如果您的锥体从 -10 变为 +20,只需使用 350 到 380 即可。 当然,当您测试一个角度时,请确保您还添加 360 度并测试原始角度和添加的角度。

      例如测试 +5(在您的锥体中),您将测试 5(失败)然后 365(通过)。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2014-08-01
        • 2011-10-30
        • 1970-01-01
        • 2011-07-24
        • 2010-11-22
        相关资源
        最近更新 更多