我的世界1.8指令用来在Minecraft中算圆周率,这个方法是利用了随机数生成器和1.8强大的记分板系统将这种算法在MC中实现了,具体的操作方法我们一起来看看。
电路展示
预备知识:
任取三个整数,能构成钝角三角形的概率是:
设这三个正数中最大的一个为a,另外两个分别为x,y.
则有0
(i)要构成一个三角形,则须满足:x+y>a,这样的点的集合表示的是正方形面积a^2的一半,
(ii)而x,y,a形成钝角三角形,还需满足x2+y2
圆(πa2/4)减去一个三角形(a2/2)后的弓形。
于是概率P=[(πa2/4)-(a2/2)]/a2=(π-2)/4
所以我就利用随机数生成器和1.8强大的记分板系统将这种算法在MC中实现了。
随机器不断生成3个1-18内的随机数a,b,c,被送到右边进行判断。若能构成钝角三角形则会输出。如此循环计算,每次计算大概耗时2s左右。这里挂了一会机,已经进行了一千多次运算:
m=1566,n=391(m为总次数,n为成功次数)
∴n/m=P(构成钝角三角形的)=(π-2)/4
解得差不多为3,当然计算次数过少,误差还是比较大的。
原理
随机器大家都比较熟悉了,就不再赘述了。主要讲解一下检测部分。
1.三组主随机器在两个子随机器中抽取一个
2.各组子随机器抽取三个1~18的随机正整数存入a,b,c
3.确认是否存在以a,b,c为三边的三角形
(1)求a+b,a+c,b+c的值
①if a+b>c
/scoreboard objectives operation @a a+b += @a b
/scoreboard objectives operation @a a+b += @a a
②if a+c>b
/scoreboard objectives operation @a a+c += @a c
/scoreboard objectives operation @a a+c += @a a
③if b+c>a
/scoreboard objectives operation @a b+c += @a c
/scoreboard objectives operation @a b+c += @a b
(2)将a+b,a+c,b+c与c,b,a相减
①a+b-c
/scoreboard objectives operation @a nc += @a a+b
/scoreboard objectives operation @a nc -= @a c
②a+c-b
/scoreboard objectives operation @a nb += @a a+c
/scoreboard objectives operation @a nb -= @a b
③b+c-a
/scoreboard objectives operation @a na += @a b+c
/scoreboard objectives operation @a na -= @a a
(3)检测a+b-c,a+c-b,b+c-a是否全部大于1
/testfor @p[score_nc_min=1]
/testfor @p[score_nb_min=1]
/testfor @p[score_na_min=1]
4.确认是否存在以a,b,c为三边的钝角三角形
(1)求a2,b2,c2的值
/scoreboard objectives operation @a a2 *= @a a
/scoreboard objectives operation @a a2 *= @a a
/scoreboard objectives operation @a b2 *= @a b
/scoreboard objectives operation @a b2 *= @a b
/scoreboard objectives operation @a c2 *= @a c
/scoreboard objectives operation @a c2 *= @a c
(2)求a2+b2,a2+c2,b2+c2的值
①a2+b2
/scoreboard objectives operation @a a+b2 += @a b2
/scoreboard objectives operation @a a+b2 += @a a2
②a2+c2
/scoreboard objectives operation @a a+c2 += @a c2
/scoreboard objectives operation @a a+c2 += @a a2
③b2+c2
/scoreboard objectives operation @a b+c2 += @a c2
/scoreboard objectives operation @a b+c2 += @a b2
(3)将c,b,a与a2+b2,a2+c2,b2+c2相减
①c2-(a2+b2)
/scoreboard objectives operation @a nc2 += @a c2
/scoreboard objectives operation @a nc2 -= @a a+b2
②b2-(a2+c2)
/scoreboard objectives operation @a nb2 += @a b2
/scoreboard objectives operation @a nb2 -= @a a+c2
③a2-(b2+c2)
/scoreboard objectives operation @a na2 += @a a2
/scoreboard objectives operation @a na2 -= @a b+c2
(4)检测c2-(a2+b2),b2-(a2+c2),a2-(b2+c2)任意一个大于1
/testfor @p[score_nc2_min=1]
/testfor @p[score_nb2_min=1]
/testfor @p[score_na2_min=1]