minecraft冰船运动学1:你到底有多快? 您所在的位置:网站首页 我的世界蓝冰怎么化成水 minecraft冰船运动学1:你到底有多快?

minecraft冰船运动学1:你到底有多快?

2024-07-11 13:42| 来源: 网络整理| 查看: 265

本帖最早是我发布于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 实验室设备网 版权所有