如何用布尔逻辑组合三个区域条件判断图形颜色

本文讲解如何通过布尔运算符(&&、!)组合三个圆形区域的逻辑条件,实现对二维平面上某点颜色(灰色/白色)的准确判断,适用于图形渲染、区域填充等编程场景。

在二维坐标系中,我们常需根据点 $(x, y)$ 相对于多个几何区域(如同心圆、偏移圆)的位置关系,决定其显示属性(例如

颜色)。本例涉及三个圆形区域:

  • one:以 $(2, 2)$ 为圆心、半径为 $1$ 的圆,即满足 $(x-2)^2 + (y-2)^2 \leq 1$;
  • two:以 $(0, 0)$ 为圆心、半径为 $1$ 的小圆(图中白色中心区域),即 $x^2 + y^2 \leq 1$;
  • three:以 $(0, 0)$ 为圆心、半径为 $2$ 的大圆(图中灰色主区域),即 $x^2 + y^2 \leq 4$。

目标是:仅当点位于 one 内 且不 在 two 内 在 three 内时,返回 "gray";其余情况为 "white"。

✅ 正确的布尔表达式为:

if (one && !two && three) {
    return "gray";
} else {
    return "white";
}

? 关键解析:

  • one && !two 确保点落在右上角小圆内,但排除其中心白色小圆重叠部分;
  • && three 进一步限定该点必须仍在大圆范围内(因 one 圆心在 $(2,2)$,其最远点距原点约 $\sqrt{(3)^2+(3)^2} \approx 4.24 > 2$,故 one 并不完全包含于 three,需显式约束);
  • 若省略 three,可能误判 $(2.5, 2.5)$ 等在 one 内却超出大圆的点为灰色——这是常见逻辑漏洞。

? 实际代码示例(Java/JavaScript 风格):

boolean one = Math.pow(x - 2, 2) + Math.pow(y - 2, 2) <= 1;
boolean two = x * x + y * y <= 1;
boolean three = x * x + y * y <= 4;

String color = (one && !two && three) ? "gray" : "white";

⚠️ 注意事项:

  • 布尔变量命名应语义清晰(避免用 a, b, c),便于维护;
  • 浮点数比较建议预留精度容差(如
  • 逻辑优先级:! 高于 &&,无需额外括号,但为可读性,!(two) 可写为 !two。

综上,合理运用 && 和 ! 能精准建模嵌套/排斥型区域关系,是图形学与交互逻辑中的基础而关键的技能。