我有一行巫婆以设定的速度(每次计算的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可能会有所帮助,但我真的无法使其正常工作