UU看書

第七十五章 區域性座標與執行朝向

天才一秒記住【UU看書】地址:www.uukanshu.co

(本章於2022年7月18日重寫)

(建議閱讀本章的讀者需具備一定的空間想象能力,並預先準備好筆和草稿紙,或一個3D畫圖軟體)

本章以及接下來兩章原本是講execute的條件子命令和儲存子命令的,結果本書第一次大修中這些內容在前面幾章講完了,這幾章就空出來。

所以這一章,我們就來研究一下:區域性座標與執行朝向的關係。

在第五十九章『更深入地瞭解座標』中,我們瞭解到區域性座標是以執行者的頭為原點,但其實這個觀點是完全錯誤的。要想糾正這個錯誤,我們就得了解到區域性座標的本質。

區域性座標的本質是什麼呢?簡單來說,區域性座標就是一種基於相對座標並受執行朝向影響的一種座標。區域性座標的原點在相對座標的基礎上計算而成,三個座標軸根據執行朝向不斷改變其傾斜角度。

為了能夠更好理解區域性座標的本質,我們可以以執行地點為圓心O,任意實數r為半徑,畫一個處於水平面上的圓,這個圓我們可以稱之為『水平朝向圓』,用來代表水平旋轉角度。然後,我們再以同樣的點O為圓心,同樣的r為半徑,畫一個和絕對y、z座標軸處於相同平面上的圓,這個圓我們可以稱之為『垂直朝向圓』,用來代表垂直旋轉角度。

畫出來後,我們就會發現這兩個圓組成了一個球體,這個球體我們可以稱之為『朝向球』。(注:這些名詞都是作者自己編的)

在這個『朝向球』中,『水平旋轉圓』和『垂直旋轉圓』的邊有兩個交點,這兩個交點就分別代表著180°,0°和0°,0°這兩個特殊的旋轉角度。由於這兩個交點所代表的旋轉角度很特殊,我們就將這個『朝向球』稱之為『標準朝向球』,意指這個朝向球代表著標準的、預設的朝向。

在Minecraft中,命令方塊執行指令時,它的朝向球就是這樣子的,因為本身其沒有朝向,所以預設採用『水平朝向正南』的朝向來執行指令。

但是在玩家身上呢?甚至在其他實體身上呢?由於實體的朝向會不斷改變且不標準,所以每個實體朝向球內的『水平朝向圓』和『垂直朝向圓』並不一定處於水平面和絕對yz座標的平面上,而是有一個偏差的角度。

比如說這位玩家,他的水平旋轉角度為76°(南偏西76°),垂直旋轉角度為27°(水平向上27°)。我們以這位玩家的位置作為圓心O,以任意實數r為半徑,畫出的『水平朝向圓』所在的平面和水平面的夾角為27°,畫出的『垂直朝向圓』所在的平面和絕對yz座標軸所在的平面的夾角為76°(或104°)。

不難發現,在這種不標準的朝向球中,『水平朝向圓』傾斜的角度是由『垂直旋轉角度』決定的,而『垂直朝向圓』偏差的角度是由『水平旋轉角度』決定的,兩者是互相影響的關係。

如果你讀懂了上面的內容,那麼恭喜你,我們現在可以嘗試加點兒料來切入主題了。如果你沒有讀懂,也沒事,畫點圖,或者搜一搜和上述概念很類似的『天球』,瞭解瞭解,你大概也就懂了。

我們還是以剛才那位玩家的朝向球為基礎,你會發現在這個朝向球中也有兩個交點,分別代表著76°,27°和104°,27°的朝向,前者是玩家正面的朝向,後者是玩家背面的朝向。我們設前者為A點,後者為B點,過AB點作直線AB,這條直線AB必定會過圓心O點。

現在,我們把這條直線AB當作是一個原點是O的座標軸,向A點方向為正方向,向B點方向為反方向。這條座標軸是什麼呢?就是這名玩家區域性座標的z座標軸!

然後,我們隱藏掉『垂直朝向圓』,只看『水平朝向圓』和z座標軸。我們能夠看見z座標軸和圓的邊有兩個交點,這兩個交點也就是上面的A點和B點。

我們過圓心O作z座標軸的垂線,分別交『水平朝向圓』的邊於C、D兩點。這個垂線也就是這名玩家區域性座標的x座標軸。那麼這個x座標軸的正方向在哪裡呢?你當然可以透過左正右負判斷出來,但是這樣子也過於淺顯了一些。我們必須要找到C點和D點這兩點分別的含義,才能確定x座標軸的正方向在哪裡。

由於x軸和z軸互相垂直,因此這裡就形成了四個直角三角形——∠AOC、∠AOD、∠BOC和∠BOD。由於這四個角都是圓心角,所以我們就可以得到它們對應的弧AC、AD、BC、BD的長度都是90°。

別忘了,這裡的圓是『水平朝向圓』,所以這裡弧長的實際意義都是水平旋轉角度。在這邊,我們把『水平朝向圓』所代表的旋轉角度當成是相對水平旋轉角度,A點為0°點,順時針增加度數,因此我們就可以得到A、B、C、D四個點分別代表的度數:

A0°

B180°

C90°或270°,看你是怎樣標的)

D270°(或90°)

現在我們得到了這四個點所代表的『相對水平旋轉角度』的度數。那問題來了,這個度數的實際意義是什麼?

A為0°,代表著正前方;B為180°,代表著正後方;C為90°(或270°),代表著正右方向;D為270°(或90°),代表著正左方向。而據我們所知,區域性座標x軸的正方向是向右,所以在這邊,x座標軸朝向D點(或C點)的方向為正方向。

接下來,我們來看看『垂直朝向圓』,把最後的y座標軸也畫出來。還是故技重施,過圓心O作z座標軸的垂線,分別交『垂直朝向圓』的邊於E、F兩點,這個垂線也就是這名玩家的y座標軸。仔細觀察E、F點,想象一下當玩家朝向改變時,E、F點會怎麼運動。你會發現E點(或F點)不管怎麼運動,都不會超出『垂直朝向圓』上代表著垂直旋轉角度為0°180°的圓弧,也就是說不會跑到過O點水平線以下的位置。所以,這個y座標軸朝向點E(或點F)的方向為正方向,朝向點F(或點E)的方向為負方向。

如果你能夠理解上面的內容,那麼恭喜你,你已經很清楚區域性座標與旋轉角度的關係了。

但區域性座標的原點呢?

區域性座標的原點預設是執行者的腳部座標,也就是執行地點。但我們可以透過execute指令來改變執行朝向的基準部位到眼睛,來改變區域性座標的原點位置。那麼改變之後,區域性座標的原點會有什麼變化呢?讓我們來看看下面幾條指令:

①executeasspositioned50060500anchoredeyesruntps

②executeasetypecow,limit1positioned50060500anchoredeyesruntps

執行第一條指令,你會發現你被傳送到了500,5838,500,y座標並不是60,而是抬高了162米。但如果我們執行第二條指令,你會發現牛被傳送到了500,587,500,僅僅抬高了13米。所以說,當基準部位改變時,遊戲會根據當前指令的執行者來判斷眼部座標的具體位置,而不是一定就抬高一個固定的值。如果執行者不是一個實體,那就沒有眼睛,將不會對執行朝向的原點以及區域性座標的原點有任何的變化。

這就是區域性座標與執行朝向的關係。需要注意的是,在tp和teleport指令中,區域性座標的旋轉角度和原點是分家的——旋轉角度會採用傳送目標的旋轉角度,而原點會基於執行地點計算出來,兩者的來源並不一樣。

這就是本章的全部內容了,你讀懂了嗎?

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

醫毒雙絕,一睜眼竟然生了雙胎! 我玩了個假的MC? 全職高手之白風沐雪 吳小凡重生籃球生涯 我在全息遊戲中錦鯉出圈 什麼叫瀟灑型中鋒啊 又玩克蘇魯跑團網遊