【minecraft原版无mod】对实体方块阵型排列进行 斜体、90°旋转、非90°旋转
(以下内容复制自俺以前在MCBBS发的原理帖……当时还在1.9的样子……现在原帖由于过于陈旧需要解锁卡才能看……所以干脆搬出来吧,毕竟是俺魔方系统的重要原理
https://www.mcbbs.net/forum.php?mod=viewthread&tid=654676
有些图已经不能看到了……文章格式也没有调整多少……如果在mcbbs金粒多的话大概还是原帖看比较好吧(呃,小心,挖坟是违规的_(:з」∠)_)
另外由于命令是1.9的,和现在已经大不相同了
不过还是在1.17有个作品,可以看下面两个视频,简介里应该是有存档文件链接的
)

斜体与旋转
(适用于操作厚平面)
前言:
其实斜体、90°旋转的方法是很早就想到了的(大概在第一代斜线法发布几天后,而斜线机(http://www.mcbbs.net/thread-544286-1-1.html)也透露出了一点“预告”),但是由于没注意到其重要性与实用性加上太过懒癌(恩这是主要原因),所以迟迟没有发布。
而非90°旋转在当时一直没有想出来,那时的设想会导致旋转正方形后会成为一个奇怪的平行四边形。
一节体训上回想起直角三角形,又想到了“扫描法”,于是一个相对比较标准的非90°旋转法就想出来了(不过缺陷是会有洞(直角三角形斜边大于直边)(可能扫描得密一些可以较好解决))
ps:不久前见到了“船黑科技”,用“中介点扫描法”应该也可以,但是想到效率太低于是没想太多,(不过或许可以控制大小基本不变)
【主要思想】:1.相对坐标“堆叠”;*2.绝对与相对坐标的结合/相互转换(重点);3.(仅在非90°旋转中)“中介”线扫描法;4.(灵活运用的思想)可以把该平面分为多个“大块”,最后的处理效果就像是“大方块的转换”(如分为多个2x2x2的大块,最后原本1x1x1的“像素美”会变成2x2x2)
基本原理示意图

注:我在这里生成的正方形是从(41,114,228)fill到 (62,135,228)
(即以(41,114,228)为原点(以下省略为“正方形原点”,而实体原点(41,114,229)将被省略为“实体原点”),向x+、y+方向作边长为22个方块(两边相对坐标差是~21)的正方形)
(另见b:http://www.mcbbs.net/thread-664232-1-1.html)

斜体
对实体
其实原型就是“第一代斜线法”(http://www.mcbbs.net/thread-511419-1-1.html)(当时说话好像不大文明啊)
【步骤】
1.先要有一排或一面比较整齐的实体阵型(生成法见“fill实体”)
- /fill 41 114 229 62 114 229 minecraft:command_block 0 replace {auto:1b,Command:summon snowball ~ ~ ~2 {NoGravity:1b,CustomName:"turn"}}
(这里我生成了从实体原点向x+方向延伸21格(~21)的实体排)
2.使用相对坐标“堆叠”思想进行tp:
- execute @e[name=turn] ~1 ~-22 ~ tp @e[name=turn,dx=22,dy=44] ~ ~0.5 ~
(顺便还fill了一个正方形(为后面作准备))
对方块
【步骤】
方法a(相对坐标堆叠法):
1.准备一排实体(不斜)
2.使用相对坐标“堆叠”思想进行clone:
- execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~22 ~44 ~ ~ ~1 ~ masked move
优点:可以少一些绝对坐标的要求
缺点:这样只能允许1:1的斜体,而且比较费资源,还更可能影响到别的方块
方法b(绝对与相对坐标的结合/相互转换):
*注:(坐标从绝对到相对我称为“推”,相对到绝对我称为“拉”)
1.准备一些实体(可以是任何排列方式(除斜线外曲线也可以,最终“斜体”会沿着这条线来),但必须保证每个实体的控制范围互不影响(一个实体占一个选取范围))
2.使用绝对与相对坐标的结合/相互转换思想进行clone:
“推”:
- execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 135 ~ ~ ~ ~ masked move
“拉”(做出与推相反的行为即将推的动作“还原”):
- execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~ ~100 ~ ~ 114 ~ masked move
原理:即绝对与相对坐标的结合/相互转换思想,当然也可以用“函数的加减”来解释(ya=x2,yb=x+1,yc=ya+yb=x2+x+1)
优点:这个“斜体”会完全按照实体的排列方式进行“斜体”

90°旋转
(对斜体的灵活运用)
基本上原理就是示意图上的了,斜体的方式可"推"可"拉"(但必须是1:1),实体在适当时加tag区分就好了(实体阵旋转没做)
【步骤】(注意21是(边长-1)):
1.向上斜体
execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 135 ~ ~ ~ ~ masked move
复制代码
2.上半部分过渡
execute @e[name=turn] ~ ~21 ~-1 clone ~ ~ ~ ~21 ~ ~ 41 ~ ~ masked move
复制代码
3.下半部分过渡
execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~-21 ~ ~ 41 ~ ~ masked move
复制代码
4.最后的落回
execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 156 ~ ~ ~-21 ~ masked move
复制代码

非90°旋转
(做完你就会发现,这并不完美)
【主要的特殊原理】:“中介”扫描法
我们都知道,mc的fill、clone暂时不可以直接从一个实体的相对坐标到另一个实体的相对坐标。
但是我们可以借助通过一个已知的绝对坐标作为“中介”,先把这边扫描到的东西放在“中介”处,再把“中介”处的东西放到那边,就间接地实现相对坐标到相对坐标
利用此法,我们就可以把这个正方形分成小排,再对小排依次进行它自己的变换
【步骤】(曾经想过多种方法,还是这种最简洁):
1.作出与该倾斜方向垂直的另一条实体斜线(建议用不同的名字),并给最下面的实体作上标记(建议tag)
/fill 41 114 229 41 135 229 minecraft:command_block 0 replace {auto:1b,Command:summon snowball ~ ~ ~2 {NoGravity:1b,CustomName:"turn2"}}
复制代码
scoreboard players tag @e[x=41,y=114,z=231,r=1,c=1,name=turn2,tag=!mark] add mark
复制代码
execute @e[name=turn2] ~22 ~1 ~ tp @e[name=turn2,dx=-44,dy=22] ~-0.5 ~ ~
复制代码
方式a(会放大且有孔):
2.把正方形弄斜(推)(我这里已经有了一条实体斜线)
execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 135 ~ ~ ~ ~ masked move
复制代码
3.高频部分(当然也要在适当时停下,我这里是用木质按钮图方便):
(1)存一列方块
execute @e[name=turn2,tag=mark] ~ ~ ~-1 clone ~ ~ ~ ~ ~21 ~ 63 ~ ~ masked move
复制代码
(2)对这一列方块进行“隔空”斜体
execute @e[name=turn2] ~ ~ ~-1 clone 63 ~ ~ 63 ~ ~ ~ ~ ~ masked move
复制代码
(3)移动一段距离(切换目标)
tp @e[name=turn2] ~1 ~0.5 ~
复制代码
方式b(相当于对a的还原,但也不完全是(若完全成为还原动作,移动得在最前))
2.高频部分(当然也要在适当时停下,我这里是用木质按钮图方便):
(1)该线斜体还原,并“存入”
execute @e[name=turn2] ~ ~ ~-1 clone ~ ~ ~ ~ ~ ~ 63 ~ ~ masked move
复制代码
(2)将
execute @e[name=turn2,tag=mark] ~ ~ ~-1 clone 63 ~ ~ 63 ~21 ~ ~ ~ ~ masked move
复制代码
(3)移动一段距离(切换目标)
tp @e[name=turn2] ~-1 ~-0.5 ~
复制代码
3.(高频结束后)把斜的正方形弄正(拉)
execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~ ~21 ~ ~ 114 ~ masked move
复制代码
这里还有个45°的
(对此的改进版在此(即b中):http://www.mcbbs.net/thread-664232-1-1.html)

可以把该平面分为多个“大块”,最后的处理效果就像是“大方块的转换”(如分为多个2x2x2的大块,最后原本1x1x1的“像素美”会变成2x2x2)

另外:
http://www.mcbbs.net/thread-580307-1-1.html这并不需要太多命令方块
@FHC红石 @langyo @12356789asdfg @Deing @chyx @ddung @雷鸣·翾鹗 @MsYqgzt @乾.坤 @-ZCH-
最后是存档、pcb、基本原理图原图(百度网盘)
http://pan.baidu.com/s/1o8wHqd0
有些可能没法看图床,这里发网盘吧:https://pan.baidu.com/s/1eS5fjbG
希望可以帮到大家
当前长度: 9289 字节,系统限制: 10 到 1000000 字节。(码了几个小时)
来自群组: The Minecraft Lover与The Command's Power

_(:з」∠)_嗯,转眼已经过去好久好久了……这个原理一直没见到别人用过(笑哭)
自己做的作品,也没有什么人看吧……
所以打算,稍微整点活儿,做个101阶魔方,应该就能稍微多点人看到了吧……(瞳瞳模型后打算做个101阶魔方,顺便可能把跑酷迷宫机(BV1Hb4y1678F)也带一带(笑))