放弃手机的第一天我在做什么

提前一天把手机放到架子上不容易进入视线和被手够到的地方,开始为期七天的实验:尝试放弃手机一周。

早上八点前,闹钟叫醒的我。

没有手机以后不会想着刷会视频或者是多葛优躺一会,并且思绪会逐渐变得活跃,容易盯着天花板、挂画或者是透出光的窗帘思考问题。有意思的是,当脑子里开始冒出一些有趣的想法的时候,便会演变成想拿出手机查一查或者是刷会短视频的冲动。

吃完早餐,打开电脑,为了确保消息能收到,所以每天必须登录上qq和微信,微信用手机点击一下验证,这是实验内的计划,每天第一件事情打开手机微信把微信登录到电脑里。

年后花了十几天剥削队友劳动成果,写完了一个项目的前端,这几天等着另一个队友更新后端,恰好没什么事情,想起来前段时间有个热搜:

这段视频的作者简单演示了病毒的传播影响,但是并没有对技术上的细节做任何解释。我尝试用Javascript也编写一个类似的模拟程序,毕竟JS可以很容易在Web上得到运行检验,而且绘制图形方面有了Canvas以后也变得容易起来。

我在搜索关于Canvas的相关资料的时候,还发现了两个用Canvas做得很好的网站:

老实说这么庞大的关系网被国家彻查确实厉害。

里面的这两个关系动态图就是采用Canvas做出来的,看起来视觉效果非常不错,流畅性也很有保障。

技术部分:

首先,尝试在500*500的方框内里渲染1000个随机分布的大小为2*2的点,颜色设置为黑色,效果还不错

接下来把落在中间大概30*30大小的区域里的点设置为红色,其他点颜色变浅色,再提升一下点的密度,设置为3000个点,效果如下:

开始添加动画效果,第一个问题是怎么让他们每个点随机一个方向走出去呢?

JS里提供了一个随机数生成函数Math.random(),它可以生成一个[0,1]区间的随机数,可以把它乘8再向上取整就能得到一个[1,8]区间内的整数。

这1-8分别代表每个点周围的格子,生成的随机整数是多少,这个点的下一个位置就挪到那个相邻的位置去。

这样一来,就可以让3000个点随机移动到相邻的另一个格子以内了,再设置一下刷新频率,大概50Hz就行,也就是20ms刷新一次。(由于是gif录制,gif的频率可能还没赶上活动频率,所以下图的效果可能和实际效果差一些)

接下来是设置感染,如何让一个白点碰到红点以后也变成红点呢?

其实有一个最简单的办法,开一个500*500的二维数组,每次刷新完以后重新填充这3000个点在数组里的位置,之后再遍历一次3000个点,把所有红点在的格子里的其他点也标记成红色的,不过这个办法我没有去实现,我是写完排序以后才想出来的,这个算法对数据的结构要求和空间开销会高一点。

另一个办法就是进行排序,按照第一关键字为x轴(升序),第二关键字为y轴(升序),第三关键字为颜色(红色优先)进行排序,之后只要再遍历一次点集,相邻两个点如果是重合的就进行传播。虽然我没有手打过多关键字的快速排序,但是简单想想,只要先把两个点的比较函数单独定义出来,其他需要比较的地方全部都调用该函数即可。最后我花了两个小时敲出了这个快排 ( 。【实际上快排在比较大小的时候有一些严格的要求,但是我以前没有仔细探究过,在快排经历多次重用的时候这种细节问题很容易暴露】,效果如下:

可以看到这团红点规模在短短几秒内迅速扩大。

快排的代码如下

接下来就可以做一些有意思的扩展了,首先设置一个染病率,和红点接触的白点只有百分之几的概率也变成红色,再次运行就会发现的确红色扩散得很慢。【左边是30%的概率,右边是100%的概率】

 

还可以设置潜伏期,比如设置为5天,潜伏期一过我们就默认病人不再四处游荡,而是纷纷原地住进医院,并且在医院里的人不会再感染其它人。

这就是早发现早隔离早治疗的好处。

还可以设置一个治疗期,治疗过后的人恢复正常出院并且不再能被感染。


我已经把这个模拟程序放到了我的实验室:https://lab.ghyer.com/virus/,并且给出了一些可供调节的参数做调节演示,我没有做更多扩展,有兴趣的朋友还可以在查看源代码的页面里复制修改这份代码。

模拟过程中我发现只要传播的概率和发病的时间呈现出某种比例,那么这个病可以被很好的抑制在一小撮人当中,但是这个限制是一个比较苛刻的条件,大部分的情况都远离这个比例,也就是说,如果没有进行隔离的话,那么最后所有的人都躲不开传染。

友情提醒:你可能会为了看到红色遍布每个角落而浪费大把美好时光。

 

最后说点别的。

今天看了阮一峰的科技日报,里面对新冠病毒给企业带来的启示写了三句话:

  1. 90%以上的会都是可以不开的。
  2. 许多班是可以不加的
  3. 许多养闲人的工作岗位是可以没有的。

并且预言接下来会有大批的公司裁员,这是一个非常有意思的结论,是对是错都可以拭目以待。


放弃手机的第二天我在做什么

放弃手机的第三天我在做什么

放弃手机的第四天我在做什么

放弃手机的第五天我在做什么

放弃手机的第六天我在做什么

放弃手机的第七天我在做什么

-- 热度:77 ℃
-- 于 共写了2119个字
-- 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注