# 滑行输入是怎么工作的 \[打字系列Vol.2]

_这是打字系列的第二篇文章，依旧是我研究的本行，嘿嘿_

滑行输入对于许多人来说也许是一个新鲜玩意儿：在键盘上来回滑动就可以输入单词，听起来很好玩吧？键盘是如何通过这些歪歪扭扭的轨迹推测出你想要的那个词呢？

<figure><img src="https://pic3.zhimg.com/v2-2c7df26b71280f6dc50c4ad8284aa48e_b.jpg" alt="动图封面"><figcaption><p>Gboard 上面的滑行输入</p></figcaption></figure>

### # 一句话总结

滑行输入通过划过单词的每个字母来来输入单词，并通过形状匹配方式来选择合适的单词。

### # 目录

* 什么是滑行输入
* 单词都是怎么被划出来的
* 脑洞+滑行输入=？
* 硬核时刻：最小加加速度理论

### 什么是滑行输入

传统的打字方式是通过点击键盘上的按键来进行输入，而滑行输入，顾名思义，则是通过在键盘上滑动来输入单词。 输入一个单词的时候，手指需要划过这个单词的每个字母。中文的拼音也支持滑行输入（有的输入法叫做划行输入）--- 如果你还没用过滑行输入，现在可以打开它试一试（iOS键盘目前只有英文可以滑行输入）。

这种看起来很奇葩的方式，现在已经成为了继点击输入之后的第二大打字方式。但是滑行输入好在哪里呢？

* 省时。输入一个单词，比如 dad 的时候，点击输入要做的动作是：手指点在 d 上 - 抬起来 - 手指点在 a 上 - 抬起来 - 手指点在 d 上 - 抬起来；而划行输入则是 手指点在 d 上 - 划一下（划到 a 再拐到 d）- 抬起来 。 整个过程省去了所有中间字母点击的时间。
* 单手支持更好。因为滑行输入全程只用到一个手指，它天生对单手有更好的支持。点击输入会有的误触其他按键、拿不稳手机的问题，滑行输入都可以克服（当然，前提是你知道要往哪儿划）。
* 没有拼写错误。由于滑行输入的工作原理（马上讲！），划出来的单词不会出现拼写错误。

所以各种研究都发现使用滑行输入打英语的时候，整体速度要比点击的方式快上一圈儿。

这么创新的输入方式，还是华人发明的！这位科学家名字叫做翟树民，是我偶像之一（狗头）。2004年他和同事Kristensson在IBM工作的时候发明出了滑行输入的方法 \[1] ，当时是应用在手写笔上。后来老师加入了谷歌，也推动了滑行输入在智能手机上的普及。

所以好奇的小朋友一定会问——滑行输入到底是怎么从歪歪扭扭的轨迹中找到我想要的那个单词的呢？

### 单词都是怎么被划出来的

一个关键词：形状匹配。在键盘中存储了所有常用单词以及其对应的滑动形状，一个单词的形状就是按顺序将组成它的所有字母键的中心连接起来。当你开始滑动的时候，键盘就会开始在这些行中搜索，找到与所划轨迹最相似的那些单词。举个例子，我们划一个water (水），它的轨迹可能是这样的：

<figure><img src="https://pic3.zhimg.com/80/v2-3083c13afaf6a18cd333511b020b397e_1440w.webp" alt=""><figcaption></figcaption></figure>

键盘里存有的的water是这样的：

<figure><img src="https://pic4.zhimg.com/80/v2-e15100a5fb4ea7188cbb395ada45c0ef_1440w.webp" alt=""><figcaption><p>为了展示效果，ter虽然在一个水平线，我把最后e→r的轨迹向上移动了一下</p></figcaption></figure>

\


这时候键盘将划出的轨迹与water的形状比较，发现最为相近，就会打出water这个词。比较的方法，则是计算两个形状的距离。简化版的距离计算很简单：我们把两个轨迹平均分成n段，这样每个轨迹会有n+1个等分点。再计算每个点的距离，求平均，就是两个轨迹的距离。

有点绕，是不是？还是那water这个栗子，我们把用户的轨迹，存储的形状都等分成4份，这样每个轨迹就会有5个点（等分点+两个轨迹的端点）：

<figure><img src="https://pic1.zhimg.com/80/v2-d7a18f2b345e97e414960f7efe0e0828_1440w.webp" alt=""><figcaption><p>左边是你的滑动轨迹，右边是标准的轨迹，根据滑动方向将轨迹平分成4段，再计算两个轨迹中对应的点的距离，也就是绿色点和蓝色点两两之间的距离</p></figcaption></figure>

\


分完段后，计算每两个点之间的距离，求和再平均，就得到了这两个形状的距离。键盘通过比较不同单词的轨迹，会选出距离最小的作为建议的单词。这就是滑行输入的核心原理啦！当然，正常人肯定做不到滑得像标准形状那样横平竖直，于是也有了一些模型来模拟人手的运动，来生成更自然的滑动“标准形状”（想了解其中一个模型？请移步硬核时刻）。

### 脑洞+滑行输入=？

最后我们看看滑行输入除了作为日常的手机输入法，还被拿来做了什么：

#### 执行编辑命令

与其作为输入法，也有人尝试用滑行输入来执行各种命令 \[2]。比如在手机上滑“copy”，就可以执行复制；滑“paste”来粘贴，“send”来发送等等。

<figure><img src="https://pic1.zhimg.com/80/v2-df37fe9205f4b6c71eb1a666e16dd764_1440w.webp" alt=""><figcaption><p>一个上古的界面来展示如何滑行输入命令 [2]</p></figcaption></figure>

#### 在遥控器上打字

如果你也用智能电视的话，不知道你有没有骂过设计遥控器打字的人—-上下左右一个一个选字真的很累好吗！当然研究人员们已经注意到了这个问题，也发明了一种可以直接在遥控器上滑动打字的方式 \[3]，当然，你的遥控器要支持触摸屏。

<figure><img src="https://pic1.zhimg.com/80/v2-6d575706ae8051fe5883670fea72c4c8_1440w.webp" alt="" height="375" width="541"><figcaption><p>使用滑行输入来用遥控器打字 [3]</p></figcaption></figure>

\


#### 在空中滑动打字

不仅手机上可以滑，你还可以在空中（乱）滑打字！有研究用一枚戒指来跟踪手指的运动轨迹，从而实现了空中滑动输入 \[4]。带上一个戒指，开始对别人指指点点吧！

<figure><img src="https://pic1.zhimg.com/80/v2-0caf2bbecd1a8da288ca7a26967ff944_1440w.webp" alt="" height="394" width="586"><figcaption><p>虽然目前这个戒指看起来还是满笨重的嗯 [4]</p></figcaption></figure>

### 硬核时刻：最小加加速度理论

这里是硬核一点的知识，面向想要进一步了解的同学们：）

上面我们提到键盘中存储了每个单词的滑动轨迹，这些轨迹是把单词的每个字母键的中心按顺序连接得到的。然而，正常人显然滑不出那么完美的折线。那么如何模拟出更真实的滑动轨迹呢？我们可以用“最小加加速度理论”来应对。

小朋友们都知道，速度等于距离除以时间，加速度等于速度处于时间，那么加加速度就是加速度除以时间，以此类推（物理上还有8x加速度，英文叫drop）。加加速度反映了运动轨迹的平滑程度。最小加加速度理论讲的是，人在移动手的时候，总是偏向于按照更光滑的轨迹运动，因此整条轨迹的加加速度应该是最小的。也就是说，如果你的手要从 a 点经过 b 点移动到 c 点，你会下意识地运动出一条比较光滑的轨迹，而不是突然转向：

<figure><img src="https://pic3.zhimg.com/80/v2-a74a21ea935ec4fad711bf3bbbb4099e_1440w.webp" alt=""><figcaption><p>最小加加速度理论：从A点经过BC到达D点，左图是遵循最小加加速度的运动轨迹，右图是把所有点相连的轨迹，显然左图更为光滑。</p></figcaption></figure>

因此，当我们生成每一个单词的标准模型的时候，把每一个字母键位当成图中的每个点，应用最小加加速度理论，就可以得到更真实的滑动轨迹啦：

<figure><img src="https://pic1.zhimg.com/80/v2-b917f0cd1346a5b59e3a3f5a58213400_1440w.webp" alt=""><figcaption><p>蓝色是用最小加加速度理论生成的轨迹，绿色是连接中心生成的轨迹 [5]，是不是蓝色更自然一点？</p></figcaption></figure>

\


***

以上就是关于滑行输入的内容！虽然也可以用滑行输入打拼音，但是由于中文拼音都比较短，而且打完还需要手动选字的缘故，滑行输入并没有特别的占优势（个人看法，狗头）。但是炫酷就完事儿了！试想一下当你掏出手机，在小伙伴面前chua地划出一个“妙”字，岂不美哉？

<figure><img src="https://pic4.zhimg.com/v2-533f1236627a412d96cff3aeec20a7e7_b.jpg" alt="动图封面" width="597"><figcaption></figcaption></figure>

\


\


> 本文引用\
> \[1] Per-Ola Kristensson, Shumin Zhai: SHARK2:A large Vocabulary shorthand writing system for pen-based computers, 2004\
> \[2] Per-Ola Kristensson, Shumin Zhai: Command Strokes with and without Preview: Using Pen Gestures on Keyboard for Command Selection, 2007\
> \[3] Suwen Zhu, Jingjie Zheng, Shumin Zhai, Xiaojun Bi: i’sFree: Eyes-Free Gesture Typing via aTouch-Enabled Remote Control, 2019\
> \[4] Aakar Gupta, Cheng Ji, Hui-Shyong Yeo, Aaron Quigley, Daniel Vogel: RotoSwype: Word-Gesture Typing using a Ring, 2019\
> \[5] Philip Quinn, Shumin Zhai: Modeling Gesture-Typing Movements, 2018
