我試圖找出將4D向量轉換爲有界長的方法。然而,矢量及其結果長有一定的限制。向量本身由4個整數組成:第一個整數可以是Java能力內的任何東西(因此Integer.MIN_VALUE一直到Integer.MAX_VALUE)。第二個和第四個整數總是在-2999984和2999984之間(包括兩端)。最後,第三個總是在0到255之間(再次,包括兩者)。因此,它的格式如下:將4D向量轉換爲長
([Integer min - Integer max], [-2999984 - 2999984], [0 - 255], [-2999984 - 2999984])
該向量需要被轉換爲長-824629322721380016和824629339968358064.
我知道之間的有可能是沒有的功能,結果在一個1:1的匹配,但我試圖找出一個函數,儘可能減少碰撞。
如果您想知道,vector和long的這些界限並不是任意的。正如我用Minecraft給帖子貼上標籤,我應該解釋爲什麼。我試圖將一個維度中的某個blockpos與另一個維度中的blockpos相匹配。 4D向量是[dimension id,x pos,y pos,z pos],結果long是BlockPos(BlockPos#fromLong)的序列化形式。你可以看到this論壇帖子,引發了我的詢問。我在這裏問,因爲我的queston必須是MC專用的,因爲它主要是數學和基於代碼的。
這個函數是否需要很容易被逆轉?或者它可以是一種方式? –
不,該功能不需要是可逆的。只要矢量轉化爲具有上述限制的長整型。 – TheMasterGabriel