不规则视觉形状常按外接矩形简化命中区
别名: 外接矩形 · AABB · 不规则图标
概念解释
星星、箭头、对话气泡、斜体字母这类不规则轮廓,工程上经常不拿真实路径做点包含,而用轴对齐的外接矩形(AABB)当命中区。星星的四个角空白、箭头柄两侧的空气,都会变成可点击区域。这是用矩形近似替代形状测试,图省的是每帧对复杂多边形或位图 alpha 做命中的成本。
机制
UI 工具包的命中遍历从根往叶子走,每个节点先用自己的 bounds 做粗测,命中再往下。许多叶子节点到此为止,不再做像素级测试,于是粗测用的外接矩形就是最终热区。斜放的三角形外接矩形里,一半以上面积是透明的;长尾箭头的矩形会向一侧伸出一截。设计师在视觉上把图形错开了,输入上它们仍可能共用一大块矩形。Web 的默认点击区域跟布局盒走,SVG 路径除非显式设置 pointer-events,否则也常退回包围盒。位图按钮若只用非透明像素命中,倒是更贴形状,但抗锯齿半透明边会让“贴形状”变得锯齿且不稳定。
怎么研究
选一组不规则图标(星、箭、气泡、斜体字),对比三种命中:外接矩形、凸包、alpha 阈值。让人按自然姿势去点图形的尖角、凹槽和邻近空白。自变量是简化策略、图形旋转角、以及抗锯齿边的 alpha 阈值。因变量是落在透明像素上却触发的比例、落在不透明像素上却未触发的比例、以及每帧命中测试耗时。把旋转角扫一遍:0° 时矩形还比较贴,45° 时浪费面积最大。
边界
大而疏的装饰图形用外接矩形几乎无害,用户本来就会点在中心。地图上的细折线、绘图应用里的笔触,外接矩形会大到覆盖半个画布,必须用路径或加速结构。圆角已经很满的按钮,外接矩形和视觉差几个像素,简化的收益和代价都可忽略。把外接矩形再向外扩一层最小尺寸,是另一件事;这里只讨论用矩形代替不规则轮廓本身。
怎么落地
- 对凹、斜、带长柄的图形,不要默认接受布局盒;至少在调试层画出 AABB,看透明区有多大。
- 需要贴形状时用凸包或适度膨胀的 alpha 蒙版,并固定抗锯齿阈值,避免同一按钮有时点边生效有时不生效。
- 列表和画布里的命中走两级:先 AABB 粗筛,再对候选做精确测试,而不是为了省事在叶子上停掉。