0

对于我的解释,我将使用度数。

假设我从画布中心看到的角度为 45 度。从中心看,我有 10°、60°、180° 和 350° 的物体。

在这种情况下,从 45° 开始的前一个角度是 10°。从 45° 开始的下一个角度是 60°。

但是现在的问题是:

例如,如果角度为 6°,会怎样。那么前一个角度是350°。或者如果角度是 355°,那么下一个角度是 10°。

假设我们有一个类似于以下的数组,我如何确定要获得哪一个?

angles = [10, 60, 180, 350]
theAngle = 45

伪代码就可以了。

4

1 回答 1

0

您可以只使用模运算符,例如使用 C 或类 C 语言查找“前一个”角度:

int N = 4;
int angles[N] = { 10, 60, 180, 350 };
int theAngle = 45;

int prevAngle = angles[0];          // init - assume angle[0] is "previous" angle
int minAngleDelta = (theAngle - prevAngle) % 360;
for (i = 1; i < N; ++i)             // for each remaining angle
{
    int angleDelta = (theAngle - angles[i]) % 360;
    if (angleDelta < minAngleDelta) // if we found a smaller delta (modulo 360)
    {                      
        minAngleDelta = angleDelta; // track min angle delta
        prevAngle = angles[i];      // and corresponding angle
    }                    
}

注意:即使您的角度数组未排序,这也有效。

于 2013-06-25T22:44:22.783 回答