C2.20.2bounding-box hit testing设计研究

不规则视觉形状常按外接矩形简化命中区

别名: 外接矩形 · AABB · 不规则图标

概念解释

星星、箭头、对话气泡、斜体字母这类不规则轮廓,工程上经常不拿真实路径做点包含,而用轴对齐的外接矩形(AABB)当命中区。星星的四个角空白、箭头柄两侧的空气,都会变成可点击区域。这是用矩形近似替代形状测试,图省的是每帧对复杂多边形或位图 alpha 做命中的成本。

机制

UI 工具包的命中遍历从根往叶子走,每个节点先用自己的 bounds 做粗测,命中再往下。许多叶子节点到此为止,不再做像素级测试,于是粗测用的外接矩形就是最终热区。斜放的三角形外接矩形里,一半以上面积是透明的;长尾箭头的矩形会向一侧伸出一截。设计师在视觉上把图形错开了,输入上它们仍可能共用一大块矩形。Web 的默认点击区域跟布局盒走,SVG 路径除非显式设置 pointer-events,否则也常退回包围盒。位图按钮若只用非透明像素命中,倒是更贴形状,但抗锯齿半透明边会让“贴形状”变得锯齿且不稳定。

怎么研究

选一组不规则图标(星、箭、气泡、斜体字),对比三种命中:外接矩形、凸包、alpha 阈值。让人按自然姿势去点图形的尖角、凹槽和邻近空白。自变量是简化策略、图形旋转角、以及抗锯齿边的 alpha 阈值。因变量是落在透明像素上却触发的比例、落在不透明像素上却未触发的比例、以及每帧命中测试耗时。把旋转角扫一遍:0° 时矩形还比较贴,45° 时浪费面积最大。

边界

大而疏的装饰图形用外接矩形几乎无害,用户本来就会点在中心。地图上的细折线、绘图应用里的笔触,外接矩形会大到覆盖半个画布,必须用路径或加速结构。圆角已经很满的按钮,外接矩形和视觉差几个像素,简化的收益和代价都可忽略。把外接矩形再向外扩一层最小尺寸,是另一件事;这里只讨论用矩形代替不规则轮廓本身。

怎么落地

  • 对凹、斜、带长柄的图形,不要默认接受布局盒;至少在调试层画出 AABB,看透明区有多大。
  • 需要贴形状时用凸包或适度膨胀的 alpha 蒙版,并固定抗锯齿阈值,避免同一按钮有时点边生效有时不生效。
  • 列表和画布里的命中走两级:先 AABB 粗筛,再对候选做精确测试,而不是为了省事在叶子上停掉。

延伸

  • 同组C2.20.1 命中区形状可以与视觉形状不同,例如圆形图标配方形命中区 · C2.20.3 相邻不规则目标的命中区简化为矩形后可能产生重叠 · C2.20.4 命中区形状应贴近手指接触习惯的落点分布,而非单纯放大视觉边界
  • 相邻C2.14 触摸目标与视觉边界的分离 · C2.04 胖手指问题
  • 站内检索AABB · bounding box · irregular hit testing

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C2.20.2