
本文讲解如何通过布尔运算符(&&、!)组合三个圆形区域的逻辑条件,实现对二维平面上某点颜色(灰色/白色)的准确判断,适用于图形渲染、区域填充等编程场景。
在二维坐标系中,我们常需根据点 $(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。
综上,合理运用 && 和 ! 能精准建模嵌套/排斥型区域关系,是图形学与交互逻辑中的基础而关键的技能。










