矿车分类的基本模块

8-05 1,645 views

作者:nenn(百度id:正正正正正好

注1:本文中提到的所有Minecraft版本均为1.12。

1.铁轨和矿车的基本介绍

2017-06-19_12.30.07 2017-08-02_22.15.34

Minecraft中,你只能在物品栏中找到4种铁轨,但却可以获得6种不同形态的铁轨。普通铁轨具有笔直和弯曲两种形态,而充能铁轨、探测铁轨和激活铁轨只有笔直的形态。在物品栏中你也只能找到5种矿车,但实际上Minecraft一共有7种矿车。除了普通矿车、运输矿车、动力矿车、漏斗矿车和TNT矿车外,剩下的两种矿车只能通过指令来获得。

命令方块矿车的获得方式:

/summon minecraft:commandblock_minecart

/give <玩家> minecraft:command_block_minecart

刷怪箱矿车的获得方式:

/summon minecraft:spawner_minecart

刷怪箱矿车没有对应的物品形式,因此只能通过summon指令来召唤矿车实体。

不同的铁轨和矿车具有许多特性,这里就不一一展开介绍了,没有一本书的量很难把这个系统讲全面,所以这里只会聚焦于铁路系统的运动学和动力学特性上。

2.铁轨和矿车的分类

我们已经知道一共有4种铁轨和6种铁轨的形态,一共有7种矿车。如果按部就班研究每一种铁轨形态对每一种矿车的作用,那这工作量也过分庞大了。不过根本没有必要研究每一种铁轨形态对每一种矿车的作用,这是因为铁轨和矿车的运动模式并不是各不相同,不同的铁轨之间可能拥有相同的运动模式,不同的矿车之间也是如此。

充能铁轨可以加速矿车,这一点和其他所有的铁轨都不相同,但是如何比较其他铁轨对矿车的作用呢?很容易想到的方案就是通过对比矿车在不同铁轨上的滑行过程。

所以这里给出了这样的实验方案:让矿车从静止开始加速,通过1格充能铁轨的加速作用后,对比在不同铁轨构成的长直轨道上滑行的最远距离来了解不同铁轨对矿车的作用。

这里有一些测量技术上的问题。一般人很容易想到:

1)滑行距离只能是整数倍的格子长度?

2)如果矿车在弯轨构成的长直轨道上运动,如何确定矿车的位置?

这些问题也并不是不能解决:

1)每一个方块都有16*16的材质。因此如果观察对齐的像素点,可以将读数精度提高到1/16格。

2)F3+B可以让我们很好地观察矿车的碰撞箱。由于碰撞箱总是对齐坐标系的立方体,那么通过它来进行读数就可以避免读数标准不同产生的测量误差。之所以不使用其他MOD或插件,只是想说明这个实验其实非常简单,可以方便地被每一个人验证。

2017-06-19_13.52.28

如此一来,就可以获得下面的数据:

QQ20170805191301

不难看出,矿车可以分为四类:

I类:包括空的普通矿车、TNT矿车、命令方块矿车和刷怪箱矿车。

II类:包括运输矿车和漏斗矿车。

III类:载有玩家或其他生物的普通矿车。

IV类:动力矿车。

铁轨可以分为五类:

I类:充能铁轨(激活)。

II类:包括普通直轨、探测铁轨和激活铁轨。

III类:连续弯轨。

IV类:交叉弯轨。

V类:充能铁轨(未激活)

3.矿车运动过程的测量方法

虽然可以通过数格子的方式获知矿车在铁轨上的滑行距离,但是却没办法了解滑行的耗时以及矿车速度的变化情况,因此我们需要一套装置来获知时间信息。一旦获知了矿车运动的S(t)-t关系,那么获得矿车运动的v(t)-t关系和a(t)-t关系就不再困难。一旦我们建成了这样的数学模型,就可以通过计算预测出每一时刻矿车的位置,速度和加速度。这种方法是研究矿车运动最基本也是最有用的工具。

对于矿车而言,有三种可以使用的检测矿车运动过程的方法。对于不同的情况,这些方法各有优势,这里对这三种方法进行仔细的介绍。

1)探测铁轨检测

探测铁轨检测是指当矿车经过探测铁轨后探测铁轨会被激活并发出红石信号,这一信号可以用来激活命令方块icb,让icb执行下面的指令,从而记录下探测铁轨激活的时刻。

/time query gametime

每一段探测铁轨都有与之对应的一个icb记录经过这一段探测铁轨的时刻,这样就可以获得矿车在探测铁轨上的运动过程了。

这种方法的优点就是测量装置的搭建相对简单,数据处理的步骤非常少,但缺点同样明显,这种方法只能检测II类铁轨上矿车的运动过程。

2)testfor检测

testfor检测是指在铁轨下方放置命令方块rcb,其不断执行testfor指令寻找与其距离不大于1格的矿车[1]。如果能够找到符合要求的矿车,命令方块会被激活并记录下对应的时刻。

如果矿车经过rcb时速度较慢,rcb会持续输出多个信号。如果直接通过icb记录时刻,则无法分辨每一个被记录下的时刻究竟是矿车经过哪一段铁轨才发出的。这时候我们就需要一种低通滤波器来滤除高频噪声,只留下我们需要的低频信号,使用红石比较器就再合适不过了。这样一来,只有当rcb第一次检测到矿车时,icb才会记录时刻,之后即使矿车停在原处不断激活rcb,icb也不会被再次激活。

2017-06-21_09.58.13

通过这一的方式就可以检测矿车是否经过了rcb上方的轨道,并记录下矿车经过时的时刻。三个命令方块的设置如下:

rcb:不受制约,保持开启,执行指令/testfor @e[r=1]

ccb:条件制约,保持开启,执行指令/say n

icb:不受制约,红石控制,执行指令/time query gametime

需要说明的是ccb中的指令/say n。这里n是指第n段铁轨。例如rcb上的是第一段铁轨,就记录ccb中的指令就应为/say 1

如此会在游戏的日志文件中出现很多重复的信息,但是这并没什么关系,通过Excel电子表格可以很轻松地提取出经过每一段铁轨的时刻。

这种检测方法的优点同样明显,可以对所有种类的轨道和矿车进行探测。但测量装置的搭建相对麻烦,数据处理的步骤比较多。

3) entitydata检测

entitydata检测是指通过命令方块rcb执行entitydata指令,从而记录下每一游戏刻矿车的坐标信息[2]。

/entitydata @e[type=minecart] {a:1}

这意味着测量装置只需要一个rcb即可。如果不是普通矿车而是其他种类的矿车,只需要吧命令中的“minecart”更换为对应的矿车名字即可。如:运输矿车为“chest_minecart”,漏斗矿车为“hopper_minecart”,动力矿车为“furnace_minecart”,tnt矿车为“tnt_minecart”,命令方块矿车为“command_block_minecart”,刷怪箱矿车为“spawner_minecart”。

但请注意,检测后需要将cb的输出设置为false。

/gamerule commandBlockOutput false

这种检测方式不仅测量装置搭建容易,数据处理步骤也较testfor检测更少。此外其还能提供比探测铁轨检测和testfor检测更高的位置和时间测量精度,也适用于所有种类的铁轨和所有种类的矿车。

4) 不同检测方法的对比

QQ20170805192919

注:较优势的检测方法标注红色

D:[brom] Origin2017 User folderUNTITLED.opj/UNTITLED//Graph2

上面对探测铁轨检测、testfor检测和entitydata检测进行了较为全面的比较。可见相比探测铁轨检测和testfor检测,entitydata检测的优势明显。不仅检测装置搭建方便,而且测量精度高,可以满足所有种类矿车和铁轨的探测。此外,其还能精确测量矿车轨迹。

需要特别指出的是,探测铁轨检测和testfor检测无法通过简单直观的办法消除距离测量的偏置。也就是说,这两种检测方法中,命令方块记录的时刻并非对应矿车正好处于铁轨正上方的时刻。由于这两种检测办法都无法展现从静止开始加速的过程,因此消除这种距离的偏置非常困难。这也是为何探测铁轨检测和testfor检测的数据相近,而它们与entitydata检测的数据存在不同的原因。

2.矿车大类分拣系统

1)基本原理——1格充能铁轨对不同矿车的作用

C:UsersTRDesktoptemp.opj/temp//Graph1
可见,当不同种类的矿车从静止开始经1格充能铁轨加速后,在II类铁轨上滑行的过程是不同的。它们都滑行3格后,II类矿车耗时12.3游戏刻,I类矿车耗时14.3游戏刻,III类矿车耗时15.4游戏刻,而IV类矿车耗时18.0游戏刻。考虑到通过一般的红石电路只能做到2游戏刻的时间分辨能力,因此可以预测,如果在矿车滑行3格后放置铁路岔道,就可以根据矿车滑行到岔道的耗时对这些矿车进行分类。基于这一原理,可将矿车按照大类进行分拣。

2)技术实现

基于上面所述的基本原理,可以实现除TNT矿车以外所有矿车的分类。分类从左到右依次是:

1道:载有物品的运输矿车或载有物品的漏斗矿车

2道:动力矿车

3道:载有玩家或生物的普通矿车

4道:普通矿车、刷怪箱矿车或命令方块矿车

5道:空的运输矿车或空的漏斗矿车

虽然这一系统无法分类TNT矿车(会造成爆炸),但不难理解,可以通过激活铁轨首先引爆TNT矿车,从而避免TNT矿车进入该系统。所以不难理解,这一系统的实用价值较大。

2017-08-05_18.51.33

2017-08-05_18.52.49

其内部结构较为简单,且耗材不多,适合在生存模式使用。内部结构按照功能可分类如下:

蓝色:检测是否载有物品。可分拣出载有物品的运输矿车或载有物品的漏斗矿车。

红色:矿车速度重置模块。用于将矿车的速度归零。

绿色:矿车速度鉴别模块。可分拣出动力矿车

黄色:矿车速度鉴别模块。可分拣出载有玩家或生物的普通矿车、普通矿车、刷怪箱矿车或命令方块矿车

橙色:矿车速度鉴别模块。可分拣出普通矿车、刷怪箱矿车或命令方块矿车

黑色:通过所有模块未被分拣出而剩下的

QQ20170805185631

3.特别感谢

[1] 与技术玩家PotatoMaster101(MCBBS id:PotatoMaster101)的交流与学习
[2] 与技术玩家Chyx(百度id:让他该人士说)、Dim_White(百度id:滚大幕)的交流与学习

自动化铁路系统的设计准备

作者:nenn(百度id:正正正正正好) 注1:本文中提到的所有Minecraft版本均为1.12。 1.实现意义及基本技术 设计自动化铁路系统主要是为了解决两类物流问题...

阅读全文

安检模块的优化

作者:nenn(百度id:正正正正正好) 注1:本文中提到的所有Minecraft版本均为1.12。 1.主要优化 来自TopologyCraft的璺斝薧(百度id:璺斝薧)设计的一种...

阅读全文

自动化堆叠矿车分离模块

作者:nenn(百度id:正正正正正好) 注1:本文中提到的所有Minecraft版本均为1.12。 1.功能说明 [1]中提出的新型仓库系统中,车队操控技术是最重要的基础...

阅读全文

2 条评论