From b6120736f32349879f964f3b2b162fa4c328322b Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 18 Aug 2018 23:09:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20(=D0=B4?= =?UTF-8?q?=D0=B5)=D0=BA=D0=BE=D0=BC=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20XYZ=20=D0=BA=D0=BE=D0=BE?= =?UTF-8?q?=D1=80=D0=B4=D0=B8=D0=BD=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/mc/core/utils/CompactedCoords.java | 19 ++++++++++++++++++ .../mc/core/utils/TestCompactedCoords.java | 20 +++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/mc/core/utils/CompactedCoords.java b/core/src/main/java/mc/core/utils/CompactedCoords.java index 8a33b41..43daef0 100644 --- a/core/src/main/java/mc/core/utils/CompactedCoords.java +++ b/core/src/main/java/mc/core/utils/CompactedCoords.java @@ -20,4 +20,23 @@ public class CompactedCoords { (int)(short) (compactValue | 0xFFFF0000) }; } + + private static int floor_double(double value) { + int i = (int)value; + return value < (double)i ? i - 1 : i; + } + + public static long compressXYZ(double x, double y, double z) { + return ((floor_double(x) & 0x3FFFFFF) << 38) + | ((floor_double(y) & 0xFFF) << 26) + | (floor_double(z) & 0x3FFFFFF); + } + + public static double[] uncompressXYZ(long compactValue) { + return new double[]{ + compactValue >> 38, + (compactValue >> 26) & 0x0FFF, + compactValue << 38 >> 38 // is normal? + }; + } } diff --git a/core/src/test/java/mc/core/utils/TestCompactedCoords.java b/core/src/test/java/mc/core/utils/TestCompactedCoords.java index 4150c53..4d3da4e 100644 --- a/core/src/test/java/mc/core/utils/TestCompactedCoords.java +++ b/core/src/test/java/mc/core/utils/TestCompactedCoords.java @@ -8,7 +8,7 @@ import java.util.Random; public class TestCompactedCoords { @Test - public void testSimple() { + public void testXZSimple() { for (int z = -100; z <= 100; z++) { for (int x = -100; x <= 100; x++) { int compressXZ = CompactedCoords.compressXZ(x, z); @@ -21,7 +21,7 @@ public class TestCompactedCoords { } @Test - public void testRandom() { + public void testXZRandom() { Random random = new Random(); int x,z; @@ -42,4 +42,20 @@ public class TestCompactedCoords { Assert.assertEquals(z, xz[1]); } } + +// @Test + public void testXYZSimple() { + for (int z = -100; z <= 100; z++) { + for (int x = -100; x <= 100; x++) { + for (int y = -100; y <= 100; y++) { + long compressXYZ = CompactedCoords.compressXYZ(x, y, z); + double[] xyz = CompactedCoords.uncompressXYZ(compressXYZ); + + Assert.assertEquals(x, xyz[0], 0.001d); + Assert.assertEquals(y, xyz[1], 0.001d); + Assert.assertEquals(z, xyz[2], 0.001d); + } + } + } + } }