触点从合并状态分裂时坐标可能出现跳变
别名: 触点分裂 · 坐标跳变 · split discontinuity
概念解释
合并中的单 id 坐标停在两指之间。一旦固件把斑块拆成两个,旧 id 可能被重新锚定到其中一指,同时冒出第二个 id。应用看到的是:原来那条轨迹在一帧里平移了半个指距,另一条轨迹从远处凭空出现。这就是分裂跳变。它不是手指真的瞬移,是标识和质心在分割瞬间被重新指派。
机制
连通域从一块变两块时,跟踪器要做数据关联:哪个新斑块继承旧 id。常用规则是“离上一帧坐标最近的继承”,于是旧 id 从中点一下子跳到某指尖。速度估计若用相邻两帧差分,这一跳会被读成每秒数米的脉冲,甩动、惯性、绘图笔宽都会被打一下。新 id 的 begin 坐标不在屏幕边缘而在另一指旁边,依赖“begin 位置决定命中目标”的代码会在分裂瞬间点亮一个用户没按下的控件。若关联算法在两帧间改了继承对象,还会出现 id 交换,两指轨迹交叉成 X。
怎么研究
用两根探针从合并间距缓慢拉开,对齐高速摄影与逐帧 id 坐标。自变量是拉开速度、两指相对屏幕的朝向、以及旧 id 继承策略(若能从日志推断)。因变量是旧 id 在分裂帧的位移、新 id 的出现位置、速度脉冲峰值、以及是否发生 id 交换。把这一跳同时送进绘图应用和滚动应用,看墨迹是否甩出尖刺、列表是否获得一次幽灵甩动。不要用已经分开的两指做基线——那没有分裂帧。
边界
用户两指一直分得很开再各自移动,没有合并阶段,也就没有分裂跳变。触控笔从手掌抑制里“冒出来”是另一套 id 分配,跳变形态不同。有的固件在分裂时故意把旧 id 取消再开两个新 id,应用收到的是 cancel + 两个 begin,而不是一条轨迹折角;处理成普通移动会更糟。预测渲染若拿分裂帧的速度外推,尖刺会被放大成一截错墨,关掉预测只对这一帧画原始点更安全。
怎么落地
- 速度和加速度在 id 数刚从 1 变为 2 的那一帧清零或作废,不把分裂位移送进惯性或笔宽。
- 新 id 的 begin 若紧挨着一个刚分裂的旧 id,不要立刻用它做按钮命中,等几毫秒看它是否在跟手指走。
- 绘图路径在分裂帧插入抬笔再落笔,避免一条笔画出尖刺;日志里单独标记 split 帧方便回放。