我正在检查矩形的点。我无法理解如何添加(在下面的代码中检查数字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
答案 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);