From 4064155567664e0f3a636302b5d8574a85be76c6 Mon Sep 17 00:00:00 2001 From: cola98765 Date: Sun, 24 Oct 2021 10:28:35 +0200 Subject: [PATCH] changed Math.pow usages with simpler (and possibly faster) x*x and 1 << x. reduced repetitions --- .../lod/objects/VerticalLevelContainer.java | 4 +-- .../com/seibel/lod/util/LevelPosUtil.java | 30 ++++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java index 162d171ac..8233e5aef 100644 --- a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java +++ b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java @@ -134,7 +134,7 @@ public class VerticalLevelContainer implements LevelContainer index++; maxVerticalData = inputData[index]; index++; - size = (int) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - detailLevel); + size = 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel); int x = size * size * maxVerticalData; this.dataContainer = new long[x]; for (int i = 0; i < x; i++) @@ -217,7 +217,7 @@ public class VerticalLevelContainer implements LevelContainer { /* StringBuilder stringBuilder = new StringBuilder(); - int size = (int) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - detailLevel); + int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel); stringBuilder.append(detailLevel); stringBuilder.append(DATA_DELIMITER); for (int x = 0; x < size; x++) diff --git a/src/main/java/com/seibel/lod/util/LevelPosUtil.java b/src/main/java/com/seibel/lod/util/LevelPosUtil.java index aea601fb2..8415c72af 100644 --- a/src/main/java/com/seibel/lod/util/LevelPosUtil.java +++ b/src/main/java/com/seibel/lod/util/LevelPosUtil.java @@ -149,6 +149,10 @@ public class LevelPosUtil return convert(detailLevel, pos, LodUtil.CHUNK_DETAIL_LEVEL); } + public static int myPow2(int x) + { + return x*x; + } public static int maxDistance(byte detailLevel, int posX, int posZ, int playerPosX, int playerPosZ) { @@ -159,10 +163,15 @@ public class LevelPosUtil int endPosX = startPosX + width; int endPosZ = startPosZ + width; - int maxDistance = (int) Math.sqrt(Math.pow(playerPosX - startPosX, 2) + Math.pow(playerPosZ - startPosZ, 2)); - maxDistance = Math.max(maxDistance, (int) Math.sqrt(Math.pow(playerPosX - startPosX, 2) + Math.pow(playerPosZ - endPosZ, 2))); - maxDistance = Math.max(maxDistance, (int) Math.sqrt(Math.pow(playerPosX - endPosX, 2) + Math.pow(playerPosZ - startPosZ, 2))); - maxDistance = Math.max(maxDistance, (int) Math.sqrt(Math.pow(playerPosX - endPosX, 2) + Math.pow(playerPosZ - endPosZ, 2))); + startPosX = myPow2(playerPosX - startPosX); + startPosZ = myPow2(playerPosZ - startPosZ); + endPosX = myPow2(playerPosX - endPosX); + endPosZ = myPow2(playerPosZ - endPosZ); + + int maxDistance = (int) Math.sqrt(startPosX + startPosZ); + maxDistance = Math.max(maxDistance, (int) Math.sqrt(startPosX + endPosZ)); + maxDistance = Math.max(maxDistance, (int) Math.sqrt(endPosX + startPosZ)); + maxDistance = Math.max(maxDistance, (int) Math.sqrt(endPosX + endPosZ)); return maxDistance; } @@ -205,10 +214,15 @@ public class LevelPosUtil } else { - int minDistance = (int) Math.sqrt(Math.pow(playerPosX - startPosX, 2) + Math.pow(playerPosZ - startPosZ, 2)); - minDistance = Math.min(minDistance, (int) Math.sqrt(Math.pow(playerPosX - startPosX, 2) + Math.pow(playerPosZ - endPosZ, 2))); - minDistance = Math.min(minDistance, (int) Math.sqrt(Math.pow(playerPosX - endPosX, 2) + Math.pow(playerPosZ - startPosZ, 2))); - minDistance = Math.min(minDistance, (int) Math.sqrt(Math.pow(playerPosX - endPosX, 2) + Math.pow(playerPosZ - endPosZ, 2))); + startPosX = myPow2(playerPosX - startPosX); + startPosZ = myPow2(playerPosZ - startPosZ); + endPosX = myPow2(playerPosX - endPosX); + endPosZ = myPow2(playerPosZ - endPosZ); + + int minDistance = (int) Math.sqrt(startPosX + startPosZ); + minDistance = Math.min(minDistance, (int) Math.sqrt(startPosX + endPosZ)); + minDistance = Math.min(minDistance, (int) Math.sqrt(endPosX + startPosZ)); + minDistance = Math.min(minDistance, (int) Math.sqrt(endPosX + endPosZ)); return minDistance; } }