怎么可能再次检查结果是否为假导致更多的错误结果?

时间:2017-07-20 23:50:36

标签: c++

我正在检查矩形的点。我无法理解如何添加(在下面的代码中检查数字2 if语句)导致代码导致更多的错误返回而不是没有它。有人可以帮我理解这段代码行为。

我期待将此if语句添加到具有相同数量的false返回值或更少。

    if (p.x <= center.x + halfWidth && p.x >= center.x - halfWidth
        && p.y <= center.y + halfHeight && p.y >= center.y - halfHeight)
    {
        return true;
    }
    else
    {


        //Check number # 2
        if ( ( (p.x <= center.x + halfWidth && p.x >= center.x - halfWidth)
            || (p.x - center.x + halfWidth < 0.0001)||(p.x - center.x - halfWidth) <  0.0001)

            && ((p.y <= center.y + halfHeight && p.y >= center.y - halfHeight)
            || p.y - center.y + halfHeight <  0.0001 || p.y - center.y - halfHeight <  0.0001))
        {

            return true;
        }


        return false; 
    }

请忽略我使用的是(0.0001)而不是epsilon

1 个答案:

答案 0 :(得分:1)

使用边缘而不是中心点会更容易吗?

float left = center.x - halfWidth;    // halfWidth??
float right = center.x + halfWith;    // having rect defined this way
float top = center.y + halfHeight;    // adds 1 * FLT_EPSILOM error
float bottom = center.y - halfHeight; // to all calculus ops.

float error_x = fabs(p.x * 2 * FLT_EPSILOM);
float error_y = fabs(p.y * 2 * FLT_EPSILOM);

return (left <= (p.x + error_x) && (p.x - error_x) <= right)
    && (bottom <= (p.y + error_y) && (p.y - error_y) <= top);