旋转方向继续检查
本文关键字:检查 继续 方向 旋转 | 更新日期: 2023-09-27 18:03:17
我正在actionscript 3中的多点触控应用程序上工作,我也在c#中移植它,基本上,我在一个旋钮上工作,可以用手指旋转,我想要实现的是旋转CW或CCW我可以有连续的方向,而不是每次角度都通过180我得到了方向反转,任何提示?
哪个方向可以检测到连续的旋转方向
这是我要检测方向的代码:
private function findDirection(currentAngle : Number, targetAngle : Number) : int
{
currentAngle = refineAngle(currentAngle);
targetAngle = refineAngle(targetAngle);
if (targetAngle < 0)
{
targetAngle += (Math.PI * 2);
}
if (currentAngle < 0)
{
currentAngle += (Math.PI * 2);
}
if (targetAngle < currentAngle)
{
targetAngle += (Math.PI * 2);
}
if (targetAngle - currentAngle <= Math.PI)
{
return 1;
}
else
{
return -1;
}
}
private function refineAngle(angle : Number) : Number
{
return angle * Math.PI / 180;
}
也许这有帮助。变量continuousAngle
将跟踪执行的总旋钮旋转,即逆时针旋转两次旋钮将使您到达720
。然后顺时针旋转三次,你就回到了-360
。其他一切都应该很容易推导-限制最小值和最大值,使值环绕,将值缩放到例如每回合1
或其他任何您想要的值。
var lastAngle = 0;
var continuousAngle = 0;
function HandleDown(angle)
{
lastAngle = angle;
}
function HandleMove(angle)
{
// The orientation change in degrees of the knob since the last event with
// a range of [-180;+180). A positive value indicates counterclockwise, a
// negative value clockwise turning.
var change = (360 + angle - lastAngle) % 360;
if (change >= 180)
{
change -= 360;
}
// It may also be a good idea to not update continuousAngle if the absolute
// value of change is larger than say 10°, 20° or 40° because such large
// changes may indicate some kind of glitch like the user moving straight
// across the knob. But I am not sure and 20 is just a random guess.
if (Math.Abs(change) <= 20)
{
continuousAngle += change;
}
lastAngle = angle;
}
对于浮点数,可以使用Math.IEEEReminder
而不是剩余运算符%
来计算提醒。链接页面还展示了如何在您的语言中不可用的情况下自己实现此函数。