使用ArcTan2在+-180度边界上旋转线

时间:2018-07-18 10:34:21

标签: c# math rotation geometry

我有一行巫婆以设定的速度(每次计算的x度=旋转角度)旋转到当前鼠标位置。

这是通过使用鼠标光标计算直线的当前角度和目标角度来实现的。

然后我根据此逻辑设置新的当前角度:

            if (this.currentAangle < this.targetAngle)
            {
                if((this.currentAangle + this.rotatingAngle)> this.targetAngle)
                {
                    this.currentAangle = this.targetAngle;
                }
                else
                {
                    this.currentAangle += this.rotatingAngle;
                }
            } 
            else
            {
                if ((this.currentAangle - this.rotatingAngle) < this.targetAngle)
                {
                    this.currentAangle = this.targetAngle;
                }
                else
                {
                    this.currentAangle -= this.rotatingAngle;
                }
            }

因此,如果当前角度和目标角度之间的间隙大于旋转速度,则增加旋转速度。如果较小,则将当前角度设置为目标角度。

这种方法几乎适用于所有角度。除了当前角度和目标角度在左侧(一个蜂鸣声在-180左右,另一个蜂鸣声在180左右)的情况下

所以我相应地更改了代码:

            if (Math.Sign(this.targetAngle) != Math.Sign(this.currentAangle) && Math.Abs(this.targetAngle)>2)
            {
                Signum = -1;
            }

            if (this.currentAangle < this.targetAngle * Signum)
            {
                if((this.currentAangle + this.rotatingAngle)> this.targetAngle)
                {
                    this.currentAangle = this.targetAngle;
                }
                else
                {
                    this.currentAangle += this.rotatingAngle;
                }
            } 
            else
            {
                if ((this.currentAangle - this.rotatingAngle) < this.targetAngle)
                {

                    this.currentAangle = this.targetAngle;
                }
                else
                {
                    this.currentAangle -= this.rotatingAngle;
                }
            }

但这只能部分解决。如果我“缓慢”移动“ 9点钟”行的鼠标。它运作完美。但是,如果我快速移动鼠标,它将立即“跳”到目标。

我觉得这是由于计算错误所致。而且我想我可以使用很多if-else子句来解决问题。

有没有办法解决这个问题?有一些数学?我的感觉告诉我,在某处添加一些2 * PI可能会有所帮助,但我真的无法使其正常工作

0 个答案:

没有答案