【minecraft原版無(wú)mod】對(duì)實(shí)體方塊陣型排列進(jìn)行 斜體、90°旋轉(zhuǎn)、非90°旋轉(zhuǎn)
(以下內(nèi)容復(fù)制自俺以前在MCBBS發(fā)的原理帖……當(dāng)時(shí)還在1.9的樣子……現(xiàn)在原帖由于過(guò)于陳舊需要解鎖卡才能看……所以干脆搬出來(lái)吧,畢竟是俺魔方系統(tǒng)的重要原理
https://www.mcbbs.net/forum.php?mod=viewthread&tid=654676
有些圖已經(jīng)不能看到了……文章格式也沒(méi)有調(diào)整多少……如果在mcbbs金粒多的話(huà)大概還是原帖看比較好吧(呃,小心,挖墳是違規(guī)的_(:з」∠)_)
另外由于命令是1.9的,和現(xiàn)在已經(jīng)大不相同了
不過(guò)還是在1.17有個(gè)作品,可以看下面兩個(gè)視頻,簡(jiǎn)介里應(yīng)該是有存檔文件鏈接的
)

斜體與旋轉(zhuǎn)
(適用于操作厚平面)
? ? ? ? ? ? 前言:
? ? ? ? ? ? 其實(shí)斜體、90°旋轉(zhuǎn)的方法是很早就想到了的(大概在第一代斜線(xiàn)法發(fā)布幾天后,而斜線(xiàn)機(jī)(http://www.mcbbs.net/thread-544286-1-1.html)也透露出了一點(diǎn)“預(yù)告”),但是由于沒(méi)注意到其重要性與實(shí)用性加上太過(guò)懶癌(恩這是主要原因),所以遲遲沒(méi)有發(fā)布。
? ? ? ? ? ? 而非90°旋轉(zhuǎn)在當(dāng)時(shí)一直沒(méi)有想出來(lái),那時(shí)的設(shè)想會(huì)導(dǎo)致旋轉(zhuǎn)正方形后會(huì)成為一個(gè)奇怪的平行四邊形。
? ? ? ? ? ? 一節(jié)體訓(xùn)上回想起直角三角形,又想到了“掃描法”,于是一個(gè)相對(duì)比較標(biāo)準(zhǔn)的非90°旋轉(zhuǎn)法就想出來(lái)了(不過(guò)缺陷是會(huì)有洞(直角三角形斜邊大于直邊)(可能掃描得密一些可以較好解決))
? ? ? ? ? ? ps:不久前見(jiàn)到了“船黑科技”,用“中介點(diǎn)掃描法”應(yīng)該也可以,但是想到效率太低于是沒(méi)想太多,(不過(guò)或許可以控制大小基本不變)
? ? 【主要思想】:1.相對(duì)坐標(biāo)“堆疊”;*2.絕對(duì)與相對(duì)坐標(biāo)的結(jié)合/相互轉(zhuǎn)換(重點(diǎn));3.(僅在非90°旋轉(zhuǎn)中)“中介”線(xiàn)掃描法;4.(靈活運(yùn)用的思想)可以把該平面分為多個(gè)“大塊”,最后的處理效果就像是“大方塊的轉(zhuǎn)換”(如分為多個(gè)2x2x2的大塊,最后原本1x1x1的“像素美”會(huì)變成2x2x2)
基本原理示意圖

注:我在這里生成的正方形是從(41,114,228)fill到 (62,135,228)
(即以(41,114,228)為原點(diǎn)(以下省略為“正方形原點(diǎn)”,而實(shí)體原點(diǎn)(41,114,229)將被省略為“實(shí)體原點(diǎn)”),向x+、y+方向作邊長(zhǎng)為22個(gè)方塊(兩邊相對(duì)坐標(biāo)差是~21)的正方形)
(另見(jiàn)b:http://www.mcbbs.net/thread-664232-1-1.html)

斜體
對(duì)實(shí)體
其實(shí)原型就是“第一代斜線(xiàn)法”(http://www.mcbbs.net/thread-511419-1-1.html)(當(dāng)時(shí)說(shuō)話(huà)好像不大文明?。?/span>
【步驟】
1.先要有一排或一面比較整齊的實(shí)體陣型(生成法見(jiàn)“fill實(shí)體”)
- /fill 41 114 229 62 114 229 minecraft:command_block 0 replace {auto:1b,Command:summon snowball ~ ~ ~2 {NoGravity:1b,CustomName:"turn"}}
(這里我生成了從實(shí)體原點(diǎn)向x+方向延伸21格(~21)的實(shí)體排)
2.使用相對(duì)坐標(biāo)“堆疊”思想進(jìn)行tp:
- execute @e[name=turn] ~1 ~-22 ~ tp @e[name=turn,dx=22,dy=44] ~ ~0.5 ~
(順便還fill了一個(gè)正方形(為后面作準(zhǔn)備))
對(duì)方塊
【步驟】
方法a(相對(duì)坐標(biāo)堆疊法):
1.準(zhǔn)備一排實(shí)體(不斜)
2.使用相對(duì)坐標(biāo)“堆疊”思想進(jìn)行clone:
- execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~22 ~44 ~ ~ ~1 ~ masked move
優(yōu)點(diǎn):可以少一些絕對(duì)坐標(biāo)的要求
缺點(diǎn):這樣只能允許1:1的斜體,而且比較費(fèi)資源,還更可能影響到別的方塊
方法b(絕對(duì)與相對(duì)坐標(biāo)的結(jié)合/相互轉(zhuǎn)換):
*注:(坐標(biāo)從絕對(duì)到相對(duì)我稱(chēng)為“推”,相對(duì)到絕對(duì)我稱(chēng)為“拉”)
1.準(zhǔn)備一些實(shí)體(可以是任何排列方式(除斜線(xiàn)外曲線(xiàn)也可以,最終“斜體”會(huì)沿著這條線(xiàn)來(lái)),但必須保證每個(gè)實(shí)體的控制范圍互不影響(一個(gè)實(shí)體占一個(gè)選取范圍))
2.使用絕對(duì)與相對(duì)坐標(biāo)的結(jié)合/相互轉(zhuǎn)換思想進(jìn)行clone:
“推”:
- execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 135 ~ ~ ~ ~ masked move
“拉”(做出與推相反的行為即將推的動(dòng)作“還原”):
- execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~ ~100 ~ ~ 114 ~ masked move
原理:即絕對(duì)與相對(duì)坐標(biāo)的結(jié)合/相互轉(zhuǎn)換思想,當(dāng)然也可以用“函數(shù)的加減”來(lái)解釋?zhuān)▂a=x2,yb=x+1,yc=ya+yb=x2+x+1)
優(yōu)點(diǎn):這個(gè)“斜體”會(huì)完全按照實(shí)體的排列方式進(jìn)行“斜體”

90°旋轉(zhuǎn)
(對(duì)斜體的靈活運(yùn)用)
基本上原理就是示意圖上的了,斜體的方式可"推"可"拉"(但必須是1:1),實(shí)體在適當(dāng)時(shí)加tag區(qū)分就好了(實(shí)體陣旋轉(zhuǎn)沒(méi)做)
【步驟】(注意21是(邊長(zhǎng)-1)):
1.向上斜體
? ? execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 135 ~ ~ ~ ~ masked move
復(fù)制代碼
2.上半部分過(guò)渡
? ? execute @e[name=turn] ~ ~21 ~-1 clone ~ ~ ~ ~21 ~ ~ 41 ~ ~ masked move
復(fù)制代碼
3.下半部分過(guò)渡
? ? execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~-21 ~ ~ 41 ~ ~ masked move
復(fù)制代碼
4.最后的落回
? ? execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 156 ~ ~ ~-21 ~ masked move
復(fù)制代碼

非90°旋轉(zhuǎn)
(做完你就會(huì)發(fā)現(xiàn),這并不完美)
【主要的特殊原理】:“中介”掃描法
我們都知道,mc的fill、clone暫時(shí)不可以直接從一個(gè)實(shí)體的相對(duì)坐標(biāo)到另一個(gè)實(shí)體的相對(duì)坐標(biāo)。
但是我們可以借助通過(guò)一個(gè)已知的絕對(duì)坐標(biāo)作為“中介”,先把這邊掃描到的東西放在“中介”處,再把“中介”處的東西放到那邊,就間接地實(shí)現(xiàn)相對(duì)坐標(biāo)到相對(duì)坐標(biāo)
利用此法,我們就可以把這個(gè)正方形分成小排,再對(duì)小排依次進(jìn)行它自己的變換
【步驟】(曾經(jīng)想過(guò)多種方法,還是這種最簡(jiǎn)潔):
1.作出與該傾斜方向垂直的另一條實(shí)體斜線(xiàn)(建議用不同的名字),并給最下面的實(shí)體作上標(biāo)記(建議tag)
? ? /fill 41 114 229 41 135 229 minecraft:command_block 0 replace {auto:1b,Command:summon snowball ~ ~ ~2 {NoGravity:1b,CustomName:"turn2"}}
復(fù)制代碼
? ? scoreboard players tag @e[x=41,y=114,z=231,r=1,c=1,name=turn2,tag=!mark] add mark
復(fù)制代碼
? ? execute @e[name=turn2] ~22 ~1 ~ tp @e[name=turn2,dx=-44,dy=22] ~-0.5 ~ ~
復(fù)制代碼
方式a(會(huì)放大且有孔):
2.把正方形弄斜(推)(我這里已經(jīng)有了一條實(shí)體斜線(xiàn))
? ? execute @e[name=turn] ~ ~ ~-1 clone ~ 114 ~ ~ 135 ~ ~ ~ ~ masked move
復(fù)制代碼
3.高頻部分(當(dāng)然也要在適當(dāng)時(shí)停下,我這里是用木質(zhì)按鈕圖方便):
(1)存一列方塊
? ? execute @e[name=turn2,tag=mark] ~ ~ ~-1 clone ~ ~ ~ ~ ~21 ~ 63 ~ ~ masked move
復(fù)制代碼
(2)對(duì)這一列方塊進(jìn)行“隔空”斜體
? ? execute @e[name=turn2] ~ ~ ~-1 clone 63 ~ ~ 63 ~ ~ ~ ~ ~ masked move
復(fù)制代碼
(3)移動(dòng)一段距離(切換目標(biāo))
? ? tp @e[name=turn2] ~1 ~0.5 ~
復(fù)制代碼
方式b(相當(dāng)于對(duì)a的還原,但也不完全是(若完全成為還原動(dòng)作,移動(dòng)得在最前))
2.高頻部分(當(dāng)然也要在適當(dāng)時(shí)停下,我這里是用木質(zhì)按鈕圖方便):
(1)該線(xiàn)斜體還原,并“存入”
? ? execute @e[name=turn2] ~ ~ ~-1 clone ~ ~ ~ ~ ~ ~ 63 ~ ~ masked move
復(fù)制代碼
(2)將
? ? execute @e[name=turn2,tag=mark] ~ ~ ~-1 clone 63 ~ ~ 63 ~21 ~ ~ ~ ~ masked move
復(fù)制代碼
(3)移動(dòng)一段距離(切換目標(biāo))
? ? tp @e[name=turn2] ~-1 ~-0.5 ~
復(fù)制代碼
3.(高頻結(jié)束后)把斜的正方形弄正(拉)
? ? execute @e[name=turn] ~ ~ ~-1 clone ~ ~ ~ ~ ~21 ~ ~ 114 ~ masked move
復(fù)制代碼
這里還有個(gè)45°的
(對(duì)此的改進(jìn)版在此(即b中):http://www.mcbbs.net/thread-664232-1-1.html)

可以把該平面分為多個(gè)“大塊”,最后的處理效果就像是“大方塊的轉(zhuǎn)換”(如分為多個(gè)2x2x2的大塊,最后原本1x1x1的“像素美”會(huì)變成2x2x2)

另外:
http://www.mcbbs.net/thread-580307-1-1.html這并不需要太多命令方塊
@FHC紅石 @langyo @12356789asdfg @Deing @chyx @ddung @雷鳴·翾鶚 @MsYqgzt @乾.坤 @-ZCH-
最后是存檔、pcb、基本原理圖原圖(百度網(wǎng)盤(pán))
http://pan.baidu.com/s/1o8wHqd0
有些可能沒(méi)法看圖床,這里發(fā)網(wǎng)盤(pán)吧:https://pan.baidu.com/s/1eS5fjbG
希望可以幫到大家
當(dāng)前長(zhǎng)度: 9289 字節(jié),系統(tǒng)限制: 10 到 1000000 字節(jié)。(碼了幾個(gè)小時(shí))
來(lái)自群組: The Minecraft Lover與The Command's Power

_(:з」∠)_嗯,轉(zhuǎn)眼已經(jīng)過(guò)去好久好久了……這個(gè)原理一直沒(méi)見(jiàn)到別人用過(guò)(笑哭)
自己做的作品,也沒(méi)有什么人看吧……
所以打算,稍微整點(diǎn)活兒,做個(gè)101階魔方,應(yīng)該就能稍微多點(diǎn)人看到了吧……(瞳瞳模型后打算做個(gè)101階魔方,順便可能把跑酷迷宮機(jī)(BV1Hb4y1678F)也帶一帶(笑))