0

下面的函数有什么作用?

    public static double CleanAngle(double angle) {

        while (angle < 0)
            angle += 2 * System.Math.PI;

        while (angle > 2 * System.Math.PI)
            angle -= 2 * System.Math.PI;

        return angle;
    }

这就是它与 ATan2 一起使用的方式。我相信传递给 ATan2 的实际值总是积极的。

  static void Main(string[] args) {
        int q = 1;
        //'x- and y-coordinates will always be positive values
        //'therefore, do i need to "clean"?
        foreach (Point  oPoint in new Point[] { new Point(8,20), new Point(-8,20), new Point(8,-20), new Point(-8,-20)}) {
            Debug.WriteLine(Math.Atan2(oPoint.Y, oPoint.X), "unclean " + q.ToString());
            Debug.WriteLine(CleanAngle(Math.Atan2(oPoint.Y, oPoint.X)), "cleaned " + q.ToString());                
            q++;
        }

        //'output
        //'unclean 1: 1.19028994968253
        //'cleaned 1: 1.19028994968253
        //'unclean 2: 1.95130270390726
        //'cleaned 2: 1.95130270390726
        //'unclean 3: -1.19028994968253
        //'cleaned 3: 5.09289535749705
        //'unclean 4: -1.95130270390726
        //'cleaned 4: 4.33188260327232

    }
更新

谢谢大家的答案。每个答案都有另一个问题。

他们为什么要“标准化”角度?这是代码的一部分。

        double _theta = Math.ATan2(oEnd.Y - _start.Y, oEnd.X - _start.X);

        Point oCenter = new Point();
        oCenter.X = (int)(_start.X + _distanceTravelled * Math.Cos(_theta));
        oCenter.Y = (int)(_start.Y + _distanceTravelled * Math.Sin(_theta));

        //'move barrage
        this.Left = oCenter.X - this.Width / 2;
        this.Top = oCenter.Y - this.Height / 2;
4

4 回答 4

2

它以弧度为单位规范角度,使其在区间内[0..2pi]2pi是一个完整的圆,因此一个角x等于角x+2pi, x+4pi, x+6pi...

于 2010-04-09T07:39:57.083 回答
1

该方法将角度转换为 0..pi*2 范围内的等效角度。

如果只将正值传递给该Atan2方法,则只能返回第一象限的角度,即在 0..pi/2 范围内。因此,您不需要标准化角度。

于 2010-04-09T07:45:01.320 回答
1

下面的函数有什么作用?

这是强制将角度(以弧度表示)从 0 写入 2π 的非常缓慢的方法

他们为什么要“标准化”角度?

因为ATan()返回 -π 和 π 之间的角度,并且他们希望它在 0 和 2π 之间。

如果那是唯一使用的代码CleanAngle,那么由于身份,它就不需要了

Cos(θ) = Cos(θ-2π)  
Sin(θ) = Sin(θ-2π)
于 2010-04-09T22:59:39.633 回答
0

它将以弧度测量的角度标准化为 0 到 2 Pi 的范围。

于 2010-04-09T07:40:25.663 回答