首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助理解功能

帮助理解功能
EN

Stack Overflow用户
提问于 2010-04-09 15:36:36
回答 4查看 88关注 0票数 0

下面的函数执行什么?

代码语言:javascript
复制
    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的实际值总是正的。

代码语言:javascript
复制
  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

    }

更新

感谢你们所有人的回答。每一个答案都有另一个问题。

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

代码语言:javascript
复制
        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;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-10 06:59:40

以下函数执行什么操作?

强制将角度(以弧度为单位)从0写入到2π是一种非常慢的方式

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

因为ATan()返回-π和π之间的一个角度,而他们希望它介于0和2π之间。

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

代码语言:javascript
复制
Cos(θ) = Cos(θ-2π)  
Sin(θ) = Sin(θ-2π)
票数 1
EN

Stack Overflow用户

发布于 2010-04-09 15:39:57

它对radians中的角度进行规范,使其位于区间[0..2pi]中。2pi是一个完整的圆,因此角度x等于角度x+2pix+4pix+6pi...

票数 2
EN

Stack Overflow用户

发布于 2010-04-09 15:45:01

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2605771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档