Skip to content

酒后驾驶

在这里我可以写一些我不能在调了个酒软件上写的话。
酒后驾驶危害极大,在很多国家对于饮酒驾车者都有严厉的法律限制。
所谓:喝酒不开车....blabla

但如果我只是配着午餐只喝一杯啤酒?或者是因为嘴馋来一杯低度鸡尾酒?
uh 或许这是一个危险的想法。
虽然,大家都会义正言辞的批判酒后驾驶者是缺少道德的。
但“吹气式酒精测试仪”却常年热卖。如果购买酒精测试仪不是为了在违法边缘左右横跳,还有什么其他的用途呢?

而且我发现有很多人开发了“血液酒精含量计算器”,即使是在小程序这样的平台,也有若干个此类功能的小程序。(而且都不约而同的用了大版面介绍法律规定与酒驾危害,多少有点掩耳盗铃了...)
经过一番试用,我发现同样的数据并不能在所有软件上都得出相同的结果,或者是给出的数据不足,或不够直观。

我在想为什么不在“调了个酒”中再开发一个血液酒精浓度计算器。确实我也用得到,而且我需要更高的准确度。
这需要我深入了解这些数字是如何得出来的。

计算血液与酒精浓度的逻辑也许是简单的

浓度 = 酒精重量 / 体重

但问题就在于,人体并不是完全由水组成的。这就给简单的计算引入了自然因素。
我们需要引入一个因子来调整最终的结果,也就是:

浓度 = 酒精重量 / 体重 * 韦德马克因子(Widmark factor)

韦德马克因子这个想法是瑞典科学家 Erik Widmark 在 20 世纪初提出的,通过这个因子来计算血液酒精弄的的方式被应用在很多国家的医学和法律上。
这样就可以通过被告人的陈述推导出当时的血液酒精浓度。

韦德马克因子不是一个固定的数字,根据人种不同、性别不同,结果都会有很大差别。
但是也有可能他们在医学上被设置为固定的数字,比如有统计称香港华人的韦德马克因子为 0.68(男)和 0.59(女)
如果我们想简约一点的话,也许直接使用这两个数字也无妨。

但如果要追求更进一步的精确,依据每个人的不同身高体重来计算韦德马克因子也是可以的。
这个过程实际上也不复杂:

  1. 召集统计的参与者
  2. 收集酒后的血液样本和体重信息
  3. 根据血液酒精浓度反推出韦德马克因子

随后就可以通过线性回归得出某种计算韦德马克因子的公式。但这有一个问题:即公式是与样本绑定的。人种、性别比例,假如样本中没有极端肥胖或者骨瘦如柴的人。那么公式再面对这些情况时,数据也会变得不准确。
所以公式不是唯一的,也没有一个最好的。

总结,了解这些概念花了我一些时间,但现在如何实现一个“更好的计算器”的思路清晰了很多。
Rasmus Bååth 的文章帮了很大忙!其实我上面也是基本复述他说的话。
Rasmus Bååth 在 2014 年基于这些理论开发了一个很棒的酒精血液浓度(BAC - blood alcohol concentration)计算器DrinkR
之后我基本也是把他的 R 代码移植到 typescript 中,也许可以看看在 UI 设计上能不能有些突破。虽然这个计算过程不是很复杂,但这款早在 2014 年就开发出来的小工具似乎仍然是最好的BAC 计算器。