1

我有一个“鼠标阅读器”类,可以将旋转变成 x、y、z。(这是一种第一人称相机)但我不希望这个人直接看他的轴,所以我这样做了:

if (!(Altitude  +  MouseCoordChange[1] > 269) && !(Altitude  +  MouseCoordChange[1] < 91))
{

我计算了检查,它很完美,它可以防止你过多地上下波动,但有时它会低于 91 和 269,这怎么可能?

谢谢你

4

3 回答 3

2

你违反了 德摩根定律

换句话说:

!A && !B = !(A || B)

我怀疑你想要的是:

if (!((Altitude  +  MouseCoordChange[1] > 269) || 
      (Altitude  +  MouseCoordChange[1] < 91)))
{

或者更清楚:

if ((Altitude  +  MouseCoordChange[1] <= 269) && 
    (Altitude  +  MouseCoordChange[1] >= 91)))
{
于 2012-10-07T08:23:53.700 回答
1

好的,只是为了调试,试试这个逆逻辑。

if (  (Altitude  +  MouseCoordChange[1] < 91) &&  (Altitude  +  MouseCoordChange[1] > 269)  )
{

  //Do nothing here
}
else
{

  //Do stuff here

}
于 2012-10-07T09:14:08.643 回答
1

Range-checking happens quite often so a template will be useful for that:

template< typename _T > bool inrange(_T first, _T last, _T value)
{
    return ((value>=first) && (value<=last));
}

In your case:

if (inrange(91, 269, (Altitude  +  MouseCoordChange[1]))
{
    //is in the range - do something
}
else
{
    //is outside the range - do something
}
于 2012-10-07T09:40:25.003 回答