minecraft冰船运动学1:你到底有多快? | 您所在的位置:网站首页 › 我的世界蓝冰怎么化成水 › minecraft冰船运动学1:你到底有多快? |
本帖最早是我发布于mcbbs,今天突然有想法就在b站也发一下。b站的这个号和mcbbs的“时之虫”都是我,内容可能会有细微更改,但不存在侵权问题。 另外如果要转载到其他平台上必须私信向我申请。 mcbbs上的链接:https://www.mcbbs.net/thread-967115-1-1.html 我的mcbbs主页:https://www.mcbbs.net/?3043071 众所周知,船在冰上特别快,在蓝冰上更快。但是一说到冰道船到底有多快,网上就众口不一了:有说30m/s的,有说80m/s的,有言之凿凿200km/h的,有说不超过40m/s的……就连大佬李芒果(ilmango)说的都不一定对,他说是75米每秒(AV22050801)。 然而问题来了,为什么我说以上数字都是错的呢?因为不论你是冰、浮冰还是蓝冰的跑道,船都有一个加速的过程,换句话说船的速度是变量,不是定值,随便跑完一段跑道然后直接速度=路程/时间得出来的数据都是错的。 零.先放出结论免得太长不看虽然说冰船的速度是变量,但是它的速度有一个最大上限,这个最大上限是定值,是可以测量得到的。船在普通冰上的最大速度为40.00m/s,也就是2.0000m/gt;在蓝冰上更快,最大速度为72.526m/s,也就是3.6263m/gt。 用minihud测速的结果:蓝冰船最大速度为72.727m/s,也就是3.63635m/gt。可见开头所列举的各种错误数字也差的不少,只有李芒果的相对最准,但也差了大概2m/s。 一.测量方式 简单介绍一下我测量速度的方式: 1.跑道 测量速度,长长的跑道是必不可少的(废话)。我铺设了多条3600格长一格宽的跑道。跑道起点用发射器放置船。 跑道起点:x=0跑道终点:x=3600起点和终点如图所示。为了简便,跑道沿x轴正方向,从x=0延伸到x=3600。最左侧的是普通冰,右侧是蓝冰,中间几条是普通冰和蓝冰按照不同比例混合的冰道。混合冰道虽然由于建造复杂很少用到,但我认为仍然有研究价值。2.计时器我通过每gametick增加1的计分板来测量时间。我创建了两个计分板项目:Timer和Switch,前一个记录时间,后一个作为开关决定是否开始计时。具体实现的命令如下(可以跳过): /scoreboard objectives add Timer dummy /scoreboard objectives add Switch dummy 在红石控制的循环命令方块中执行: scoreboard players add @a[scores={Switch=1..2}] Timer 1 其中Switch分数用于控制是否开始计时(工作模式),Switch在1和2之间时开始计时;Timer用来计时,表示从开始划船的时间(gt)。 由于执行第三条的命令方块在出生点区块,所以不管我跑多远计时也不会因区块卸载而停止。 如何控制计分开始呢?这也是非常简单的。在跑道起点,我设置了如下装置: 起跑装置发射器是用来放置方向绝对准确的船(如果方向不准确,那么脱轨是必然的,自然也不能获得准确的数据)。玩家手动放船很难获得方向准确的船,所以我使用了发射器。 冰下方命令方块的命令为/scoreboard players set @p Switch 1 ,也就是将我的Switch分数设为1。当按下按钮后,船出现,但这时候船不会触发踏板。(XK打钱) 船的碰撞箱刚好没有触发踏板只有玩家坐上船出发之后,踏板才会被踩下。 相应的,在跑道终点我设置了停止计时的装置: 终点停止计时装置/scoreboard players set @p Switch 1 ,绿色连锁方块的内容分别为:/say 1,/say2,……这样做是因为冰船实在太快,冲过踏板时有非常大概率没有触发单个踏板,所以我用了一连串踏板,确保一定有踏板被触发。起跑前将Timer分数重置为1。跑道终点的停止计时装置其中脉冲命令方块的命令均为/scoreboard players set @p Switch 1 ,绿色连锁方块的内容分别为:/say 1,/say2,…… 这样做是因为冰船实在太快,冲过踏板时有非常大概率没有触发单个踏板,所以我用了一连串踏板,确保一定有踏板被触发。 起跑前需要将Timer分数重置为1。 3.数据采集方式。 为了真正有效的研究出冰道船的加速规律和最大速度,我每gt采集一次船的位移(x坐标)和对应的时间(计分板分数Timer,单位为gt)。 然而这么丧心病狂的采集速度(一秒钟采集20次数据)绝不是玩家手动能完成的,而且玩家开船的时候不能敲指令。所以我请来了/data命令来帮忙。具体实现方式如下:在-2 107 0 放置一个讲台方块(其实坐标是随意的),上面放一本成书(内容任意,反正也得被清除掉)然后用循环命令方块链接若干连锁命令方块执行如下命令: 循环:/data modify block -2 107 0 Book.tag.pages append from entity @p[scores={Switch=1..2}] Pos[0] 连锁1:data modify block -2 107 0 Book.tag.gtTemp set value 1234567 连锁2:/execute store result block -2 107 0 Book.tag.gtTemp double -1 run scoreboard players get @p Timer 连锁3:/data modify block -2 107 0 Book.tag.pages append from block -2 107 0 Book.tag.gtTemp 这一串命令的效果是:先将玩家的x坐标(Pos[0])写入到书的pages列表中(list类型nbt只能存储一种类型的数据,事先清空了pages这个列表。)然后将玩家的Timer分数乘以-1,写入到书的pages列表中。如此循环直至玩家抵达终点。 由于指令方块有跳刻执行之类讨厌的特性(bug),这一串指令可以有效暴露出采集失败的数据,便于剔除。 通过这种方式,我们把整个运动过程中每一gt的位移和时间都记录在了讲台上的一本书里。接下来对着讲台按下F3+i,这是游戏默认的热键,可以将准星对准的方块/实体的全部nbt复制到剪贴板,然后送到word文档里,用替换整理了数据格式,将其导入到matlab中。 这样我们就将冰船运动过程的数据导入成为了matlab中的一个行向量(非常长)。这个行向量的名字叫做Raw,原始数据的意思。 前方高能 二.数据处理 接下来就没有mc的事儿了。关掉mc,在matlab中执行如下指令: for i=1:1:Length; j=ceil(i/2); k=2-mod(i,2); Data(k,j)=abs(Raw(i)); end 代码中Length是Raw这个行向量的长度。代码的作用很简单,遍历了Raw,将其中的奇数次数项(玩家x坐标)作为Data这个2*N矩阵的每一列的第一行;偶数次数项(x坐标对应的时间的相反数)去绝对值,作为Data每一列的第二行。 这样我们就将Raw整理为了一个第一行是位移,第一行是时间的列表。 继续执行以下指令: for i=1:1:(Length/2-1); Data(3,i)=Data(1,i+1)-Data(1,i); end for i=1:1:(Length/2-2); Data(4,i)=Data(3,i+1)-Data(3,i); end 这一段代码是将t+1时刻的位移x_t+1与t时刻的位移x_t相减,作为t时刻的速度v_t; 然后将t+1时刻的速度v_t+1与t时刻的速度v_t相减,作为t时刻的加速度a_t。 由于时间单位都是gt,除以1gt数值上没有影响,所以代码中没有除以时间差。 这样处理有一定误差,但是影响不大,它主要是用来给出一个非常重要的定律,获得准确数据另有计算方法。 其对应的数学公式如下:速度v_t=x_{t+1}-x_t加速度at=v_{t+1}-v_t 由此可以做出一系列的图表: 位移-时间关系图速度-时间关系图加速度-时间关系图从这些图里可以看出,x-t图确实趋近于一条斜着的直线,速度确实是一个变量并且趋近于一个特定的值,加速度也在从一个有限的数字逐渐接近0。这说明文章最开头关于运动规律的定性描述是正确的。 三.至关重要的一个定律: 计算出近似的速度和加速度之后,以v为横轴,a为纵轴作出a-v关系图,我们有了一个很显著的发现: 加速度-速度关系图a和v呈现出非常好的线性关系。换句话说,加速度是速度的一次函数。这是一个非常重要的发现。 接下来的研究过程用到了微分方程,受排版限制,我用图片显示。不想看公式推导可以跳过。 公式推导公式推导这里千万不要跳过!经过以上推导,我们得出了几个重要结论: 重要结论看到这里你可能要说了,解析式你都写出来了,那这玩意全都是符号,这些代数都是多少? 别急,下一步就是测量出μ和m这两个数的值。 四.精准的测量方式 直接拟合a-v直线的方程来获取μ、m的值自然是可以的,但是我们获得速度和加速度的算法有一定的偏差,是不够精准的,这样测量出来的k和m也有一定的误差。为了更加精准的测量,我们需要利用前面推导出的结论。在我们获取的所有数据中,只有原始数据(位移和时间)的可信度是最高的。虽然v和a有误差,但是a=k*v+m的线性关系仍然是成立的。 由于跑道足够长(3600格)根据冰船运动的渐近线方程,我们需要至少两个数据来确定k和m:冰船运动的最大速度,也就是x-t渐近线的斜率,以及x-t渐近线的纵截距。 那么又回到开头的问题了:怎么测量速度? 答:截取3600m跑道中最后的约1000格,用对应的位移差除以时间差。让我们重新翻出v-t图: v-t图很显然,在绿框这一段路程中,船的速度已经收敛,非常接近最大速度。计算出这一段的值,就得到了最大速度。而后者,也就是x-t图渐近线的纵截距,只需要选取接近跑道终点的一对位移和时间数据,与最大速度一起代入x-t渐近线公式,就可以计算出纵截距。 前面已经说过,最大速度 v_m=m/μ ,所以纵截距除以最大速度就得到了μ的倒数,μ的倒数的倒数就是μ值。而m值同样可以通过最大速度乘以μ的倒数来得到。 这就是比拟合更精确的测量方式。 我分别测量了13条冰道的数据,它们的构成分别为1:0,29:1,10:1,5:1,4:1,1:1,1:4,1:5,1:10,1:29和0:1。 这里说一下我对混合冰道构成的表示方法:混合冰道由一定长度的普通冰和蓝冰拼接而成,在一对比例中前者是蓝冰段的长度,后者是普通冰的长度。如4:1冰道的每一个单元都是四块蓝冰和一块普通冰组成,1:29冰道的每个单元都由一块蓝冰和29块普通冰。显然,1:0和0:1分别表示纯蓝冰道和纯普通冰道。 用上述测量方法处理了这13组数据,测得的μ、m、v_m和1/μ的结果如下表: 不同冰道的μ和m表观察最下面一行的相对标准差就可以发现,μ、最大速度和μ的倒数的相对标准差都很大,也就是说它们的值随冰道成分变化而变化,与冰道成分有关。而m的相对标准差很小,只有1.5%,可以认为不同冰道上运动时m是一个常数,m的值与冰道成分无关。m的值取平均值,m=0.043197973 m/gt^2(米每平方游戏刻),换算成国际标准单位制就是m=17.2791748m/s^2。 μ的值则分别取这种冰道对应的μ值。 将μ和m的值代入公式,我们得到了两组可以直接用的公式: 蓝冰船运动公式普通冰船运动公式注意:船行时间近似公式是近似公式,只适用于冰道长度比较长的情况。普通冰道超过120格时适用,蓝冰道超过800格时适用。 五.冰船运动公式的物理意义虽然我们已经知道了冰船的最大速度,但在这些公式中仍然隐藏着不少有趣的东西。上文已经说明,无论是什么冰道,初始加速度m都为一个定值。初始加速度相同,这意味着什么?这意味着有一个恒力F恒定推动着这艘船,F给船的加速度是恒定的 0.04310707m/gt^2,而船的实际加速度与速度是一次函数,说明有另一个力f阻碍船的前进,这个阻力与船速成正比。F就是玩家划船的推动力,f就是冰道具有粘性对船的阻力!这种阻力和速度方向相反,且成正比例的运动,属于阻尼运动,那么刚才那个k它就有了一个新的名字,阻尼系数。(严格来说k的绝对值是阻尼系数) 阻尼系数表示冰道的粘滞程度,它的倒数就表示了冰道的光滑程度。看到没有,我们为船的运动找到了一个合适而且简洁的物理模型!MC终于讲了一回物理,牛顿老爷子您可以安息了。 (方块它该浮空还浮空啊) 六.混合冰道的阻尼系数 1.粘滞程度作为速度与阻力加速度的比值,μ可以表征冰道的粘滞程度。这样我们可以列出不同冰道的μ值,如下表所示 不同成分混合冰道的μ值表仔细观察数据发现,除了4:1这个反常值,μ总体上是随着冰道中普通冰的含量增长而逐渐变大的,而且混合冰道的粘滞系数都处在纯蓝冰和纯普通冰之间。回顾前面的最大速度v_m表也是这样。那么我们有理由猜测,混合冰道的μ值是蓝冰和普通冰μ值的平均数(当然平均数不一定是算术平均数),而且这个平均数还与冰道的成分关系密切。 这里我直接放出研究的结果:混合冰道的粘度系数μ是两种冰μ值的加权平均数(算术平均),权重就是这两种冰在冰道中所占的比例。公式如下: 混合冰道阻尼系数计算公式那么问题来了,这个公式是怎么推导出来的呢? 2.粘滞程度公式的数学模型、推导和验证接下来又是一段推导过程,不想看公式可以直接跳过这一段,不妨碍理解,也不妨碍后面利用这个公式提高冰道船的效果。 加权平均公式的物理诠释推导完这个公式之后,还需要验证一下它是否符合实验数据(公式不符合实际那还说个毛线 检验公式与实验数据的符合程度可以看出,这个公式的符合程度还是很好的,最大的相对误差也只有2.440%。 七.前景展望 1.这些公式有什么用?这里我通过两道例题来简单展示一下。例题1:Alex在下界基岩上层修建了一条长为400格的普通冰道,从冰道一端开船到另一端,需要多长时间?解:上文中有近似公式t = x ÷ 40.000 + 2.2938(单位为米、秒)代入x=400,t=400+40.000×2.2938=12.2938秒。 例题2:冰船在蓝冰道上前行多长时间,船速可以达到它在普通冰上的极限速度?解:蓝冰船速度公式: v =3.6263 × (1 - e^(-0.01178 × t)) 普通冰的速度极限是2.0000,将v=2.0000代入公式中,化简得 e^(-0.01178×t)=0.4485 两端取自然对数得-0.01178 × t = -3.1044解得t = 263.5340 gt ≈ 264 gt = 13.3 秒。 最后发表一句感言: MC这次终于物理了一回(并不),牛顿老爷子您可以安眠了。 |
CopyRight 2018-2019 实验室设备网 版权所有 |