村庄堆叠原理
1.当在这个村庄中心64格半径(不包括村庄中心所在的方块)的范围内(此范围是一个球形),
再生成一个村庄时,新的村庄,将加入这个村庄。并且,村庄中心移动到这两个村庄的中点
那么这个中心点是怎么算的呢?
公式:
x=(x1+x2)/2,
y=(y1+y2)/2,
z=(z1+z2)/2
多个门的村庄中心算法:
x=(x1+x2+x3+.....xn)/n
y=(y1+y2+y3+....yn)/n
z=(z1+z2+z3+.....zn)/n
而64格外的,将形成新的村庄
正常情况下,一个村庄的范围是半径32。然而,这个半径并不是固定的。当村庄中任意两扇门的距离>32时,
村庄范围半径将变成村庄中心到最远的门的距离,这将影响到新形成的村庄是否加入的距离因此村庄归属的
判定公式是:
(村庄半径+32)为半径的球形范围内,所形成的村庄,将加入这个村庄。以外的将形成新的村庄
2.假设:
西边门的坐标为x1
放门的位置的坐标为x2
新的村庄中心的坐标为x3
所需要放的门的数量为n
n=(x3-x1)/(x2-x3)
我们需要一个堆叠方案,用于确定村庄另一半的距离
假设DE,GH,分别为村庄的一半11扇门,距离11
F为村庄的中心点
A点为新村庄成立的点,它距离村庄中心F,距离必须>64
B点为中转点,AB之间的距离必须小于BF,否则B点会加入F点的村庄(1.8村庄就近加入原则)
C点为中转点2,BC之间的距离必须<CF。否则C村会加入F(同上)
CD之间的距离至少为5(为控制门延伸的五格控制了CD的最小距离)
EF之间的距离必须>CE(否则E点的门会加入F)
而CE最小为16(DE=11,CD最小为5)
因此得出EF必须>16
村庄半径取决于村庄距离最远的两个门的距离,<64则村庄半径为32,>64,则村庄半径=离村庄中心最远的门,到村庄中心的距离
而F的半径,我们已经确定,是32,只要IF距离>64,那么I是不会加入F村庄的
现在,我们只要把C的半径扩大到 >(CF+32)
并且,CI的距离<CF+32+32
就能实现I加入C,而不加入F,CI有交点,而IF无交点,超出加入距离。
由于AC>64(F的直径),C的半径变成AC的距离,而不是32
现在,我们回到游戏中,在距离C点64格的地方放个门(A点)
我们要把A村庄的中心转移到C点,中间用B点借一次力
在AF的中点往A方向1格的地方建第2个村庄(为了让他离A更近,成立后,加入A,而不加入F)
也就是说AB+1=BF
我们发现,B村庄加入A后,村庄中心移动到AB的中间
而这个村庄中心,离D的距离>DF
这里,我们需要在B处添加门,把村庄中心往B的方向拉
在AB上找出一个点,距离D的距离<DF(数格子总会吧)
假设,我们找到的点坐标为y,A坐标点为y1,B坐标点为y2,我们要加的门的数量为n
计算公式:
n=(y1-y) / (y-y2)
经计算,加3个门足够了。为了保证村庄中心在中心线上,我们一边放两个
当然,大家做的不一定是这样。具体按公式计算
再通过上面的公式,计算出,要把村庄中心拉到C点,所需要的门的数量
此时,我们发现村庄范围被我们扩大到AC为半径
将第1排的村庄的门,全变成有效门,于是加入了C
回到这张图,现在,我们需要在离F 64以外的地方,建立 I 村庄,因为我们不能让 I 加入F
并且,要把村庄中心拉到FG之间,用于保证GH处的门,不会加入F,而是加入新成立的村庄
在离F 65格的地方建立 I 村庄
我们要保证,I 村庄在建立的时候,不会加入F村。因此距离必须大于64
细心的同学会发现,I 村庄后面两排门的距离有可能加不到F村
当 I 村的排门加入C村时,会把村庄中心往 I 的方向拉动,
此时,后两排门距离也就够了,并且一起加入C村
具体要多少数量的门,才能把村庄中心拉到FG之间,确保GH处的门能够加入C村,而不加入F村,参看53楼计算公式
我们需要6个村民,来控制村庄的生成和失效
在村庄的形成中(7楼),我们提到,村民脚下6格,头上1格,水平方向 东南15 西北16,的任意方块上放门,就能形成村庄。利用活塞推动村民高度,来使村庄失效,从而达到堆叠的目的。
并且要注意,一个村民,控制一个村庄,互不影响。
从图中,我们可以看到,似乎C村的村民,会影响到DE处的村庄
但是,DE处的村庄我们是通过控制门的有效性,来使村庄成立的,所以并不影响
控制DE处村庄的村民,定要离C村足够的距离(不能影响到C村),并且能够控制到DE处的所有门(刚好32个,控制范围内)
这就要注意村民控制门的水平范围规则(东南15,西北16)
同理,控制GH处门的村民,也不能影响到 I 村,I 村处的村民对GH处的门,并无影响
大致如下:
AB=BF-1
BC=
CD=5
DE=11
EF=17
FG=16
GH=11
HI=
FI=65
AC>64
DF=15
BD>DF
CF=31
FH=32