FastMath class

Пакет: com.hypixel.hytale.math.iterator

Файл: com/hypixel/hytale/math/iterator/BlockIterator.java

Поля (3)

МодификаторыТипИмя
static final double ROUNDING_ERROR
static final double TWO_POWER_52
long var2

Методы (6)

МодификаторыВозвратСигнатура
static double absstatic double abs(double var0)
static boolean eqstatic boolean eq(double var0, double var2)
static long fastFloorstatic long fastFloor(double var0)
static boolean gEqstatic boolean gEq(double var0, double var2)
if if(var0 < 0.0 && var2 != var0)
static boolean sEqstatic boolean sEq(double var0, double var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.math.iterator;

class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3dc;
class="kw">import org.joml.Vector3ic;

class="kw">public class="kw">final class BlockIterator {
   class="kw">private BlockIterator() {
      throw new UnsupportedOperationException("This is a utilitiy class. Do not instantiate.");
   }

   class="kw">public class="kw">static boolean iterateFromTo(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull BlockIterator.BlockIteratorProcedure var2) {
      class="kw">return iterateFromTo(var0.x(), var0.y(), var0.z(), var1.x(), var1.y(), var1.z(), var2);
   }

   class="kw">public class="kw">static boolean iterateFromTo(@Nonnull Vector3ic var0, @Nonnull Vector3ic var1, @Nonnull BlockIterator.BlockIteratorProcedure var2) {
      class="kw">return iterateFromTo(var0.x(), var0.y(), var0.z(), var1.x(), var1.y(), var1.z(), var2);
   }

   class="kw">public class="kw">static boolean iterateFromTo(
      double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull BlockIterator.BlockIteratorProcedure var12
   ) {
      double var13 = var6 - var0;
      double var15 = var8 - var2;
      double var17 = var10 - var4;
      double var19 = Math.sqrt(var13 * var13 + var15 * var15 + var17 * var17);
      class="kw">return iterate(var0, var2, var4, var13, var15, var17, var19, var12);
   }

   class="kw">public class="kw">static <T> boolean iterateFromTo(
      double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull BlockIterator.BlockIteratorProcedurePlus1<T> var12, T var13
   ) {
      double var14 = var6 - var0;
      double var16 = var8 - var2;
      double var18 = var10 - var4;
      double var20 = Math.sqrt(var14 * var14 + var16 * var16 + var18 * var18);
      class="kw">return iterate(var0, var2, var4, var14, var16, var18, var20, var12, var13);
   }

   class="kw">public class="kw">static boolean iterate(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2, @Nonnull BlockIterator.BlockIteratorProcedure var4) {
      class="kw">return iterate(var0.x(), var0.y(), var0.z(), var1.x(), var1.y(), var1.z(), var2, var4);
   }

   class="kw">public class="kw">static boolean iterate(
      double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull BlockIterator.BlockIteratorProcedure var14
   ) {
      checkParameters(var0, var2, var4, var6, var8, var10);
      class="kw">return iterate0(var0, var2, var4, var6, var8, var10, var12, var14);
   }

   class="kw">private class="kw">static boolean iterate0(
      double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull BlockIterator.BlockIteratorProcedure var14
   ) {
      var12 /= Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10);
      int var15 = (int)BlockIterator.FastMath.fastFloor(var0);
      int var16 = (int)BlockIterator.FastMath.fastFloor(var2);
      int var17 = (int)BlockIterator.FastMath.fastFloor(var4);
      double var18 = var0 - var15;
      double var20 = var2 - var16;
      double var22 = var4 - var17;
      double var24 = 0.0;

      while (var24 <= var12) {
         double var26 = intersection(var18, var20, var22, var6, var8, var10);
         double var28 = var18 + var26 * var6;
         double var30 = var20 + var26 * var8;
         double var32 = var22 + var26 * var10;
         if (!var14.accept(var15, var16, var17, var18, var20, var22, var28, var30, var32)) {
            class="kw">return false;
         }

         if (var6 < 0.0 && BlockIterator.FastMath.sEq(var28, 0.0)) {
            var28++;
            var15--;
         } else if (var6 > 0.0 && BlockIterator.FastMath.gEq(var28, 1.0)) {
            var28--;
            var15++;
         }

         if (var8 < 0.0 && BlockIterator.FastMath.sEq(var30, 0.0)) {
            var30++;
            var16--;
         } else if (var8 > 0.0 && BlockIterator.FastMath.gEq(var30, 1.0)) {
            var30--;
            var16++;
         }

         if (var10 < 0.0 && BlockIterator.FastMath.sEq(var32, 0.0)) {
            var32++;
            var17--;
         } else if (var10 > 0.0 && BlockIterator.FastMath.gEq(var32, 1.0)) {
            var32--;
            var17++;
         }

         var24 += var26;
         var18 = var28;
         var20 = var30;
         var22 = var32;
      }

      class="kw">return true;
   }

   class="kw">public class="kw">static <T> boolean iterate(
      double var0,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      @Nonnull BlockIterator.BlockIteratorProcedurePlus1<T> var14,
      T var15
   ) {
      checkParameters(var0, var2, var4, var6, var8, var10);
      class="kw">return iterate0(var0, var2, var4, var6, var8, var10, var12, var14, var15);
   }

   class="kw">private class="kw">static <T> boolean iterate0(
      double var0,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      @Nonnull BlockIterator.BlockIteratorProcedurePlus1<T> var14,
      T var15
   ) {
      var12 /= Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10);
      int var16 = (int)BlockIterator.FastMath.fastFloor(var0);
      int var17 = (int)BlockIterator.FastMath.fastFloor(var2);
      int var18 = (int)BlockIterator.FastMath.fastFloor(var4);
      double var19 = var0 - var16;
      double var21 = var2 - var17;
      double var23 = var4 - var18;
      double var25 = 0.0;

      while (var25 <= var12) {
         double var27 = intersection(var19, var21, var23, var6, var8, var10);
         double var29 = var19 + var27 * var6;
         double var31 = var21 + var27 * var8;
         double var33 = var23 + var27 * var10;
         if (!var14.accept(var16, var17, var18, var19, var21, var23, var29, var31, var33, var15)) {
            class="kw">return false;
         }

         if (var6 < 0.0 && BlockIterator.FastMath.sEq(var29, 0.0)) {
            var29++;
            var16--;
         } else if (var6 > 0.0 && BlockIterator.FastMath.gEq(var29, 1.0)) {
            var29--;
            var16++;
         }

         if (var8 < 0.0 && BlockIterator.FastMath.sEq(var31, 0.0)) {
            var31++;
            var17--;
         } else if (var8 > 0.0 && BlockIterator.FastMath.gEq(var31, 1.0)) {
            var31--;
            var17++;
         }

         if (var10 < 0.0 && BlockIterator.FastMath.sEq(var33, 0.0)) {
            var33++;
            var18--;
         } else if (var10 > 0.0 && BlockIterator.FastMath.gEq(var33, 1.0)) {
            var33--;
            var18++;
         }

         var25 += var27;
         var19 = var29;
         var21 = var31;
         var23 = var33;
      }

      class="kw">return true;
   }

   class="kw">private class="kw">static void checkParameters(double var0, double var2, double var4, double var6, double var8, double var10) {
      if (isNonValidNumber(var0)) {
         throw new IllegalArgumentException("sx is a non-valid number! Given: " + var0);
      }

      if (isNonValidNumber(var2)) {
         throw new IllegalArgumentException("sy is a non-valid number! Given: " + var2);
      }

      if (isNonValidNumber(var4)) {
         throw new IllegalArgumentException("sz is a non-valid number! Given: " + var4);
      }

      if (isNonValidNumber(var6)) {
         throw new IllegalArgumentException("dx is a non-valid number! Given: " + var6);
      }

      if (isNonValidNumber(var8)) {
         throw new IllegalArgumentException("dy is a non-valid number! Given: " + var8);
      }

      if (isNonValidNumber(var10)) {
         throw new IllegalArgumentException("dz is a non-valid number! Given: " + var10);
      }

      if (isZeroDirection(var6, var8, var10)) {
         throw new IllegalArgumentException("Direction is ZERO! Given: (" + var6 + ", " + var8 + ", " + var10 + ")");
      }
   }

   class="kw">public class="kw">static boolean isNonValidNumber(double var0) {
      class="kw">return Double.isNaN(var0) || Double.isInfinite(var0);
   }

   class="kw">public class="kw">static boolean isZeroDirection(double var0, double var2, double var4) {
      class="kw">return BlockIterator.FastMath.eq(var0, 0.0) && BlockIterator.FastMath.eq(var2, 0.0) && BlockIterator.FastMath.eq(var4, 0.0);
   }

   class="kw">private class="kw">static double intersection(double var0, double var2, double var4, double var6, double var8, double var10) {
      double var12 = 0.0;
      if (var6 < 0.0) {
         double var14 = -var0 / var6;
         double var16 = var4 + var10 * var14;
         double var18 = var2 + var8 * var14;
         if (var14 > var12
            && BlockIterator.FastMath.gEq(var16, 0.0)
            && BlockIterator.FastMath.sEq(var16, 1.0)
            && BlockIterator.FastMath.gEq(var18, 0.0)
            && BlockIterator.FastMath.sEq(var18, 1.0)) {
            var12 = var14;
         }
      } else if (var6 > 0.0) {
         double var20 = (1.0 - var0) / var6;
         double var25 = var4 + var10 * var20;
         double var30 = var2 + var8 * var20;
         if (var20 > var12
            && BlockIterator.FastMath.gEq(var25, 0.0)
            && BlockIterator.FastMath.sEq(var25, 1.0)
            && BlockIterator.FastMath.gEq(var30, 0.0)
            && BlockIterator.FastMath.sEq(var30, 1.0)) {
            var12 = var20;
         }
      }

      if (var8 < 0.0) {
         double var21 = -var2 / var8;
         double var26 = var0 + var6 * var21;
         double var31 = var4 + var10 * var21;
         if (var21 > var12
            && BlockIterator.FastMath.gEq(var26, 0.0)
            && BlockIterator.FastMath.sEq(var26, 1.0)
            && BlockIterator.FastMath.gEq(var31, 0.0)
            && BlockIterator.FastMath.sEq(var31, 1.0)) {
            var12 = var21;
         }
      } else if (var8 > 0.0) {
         double var22 = (1.0 - var2) / var8;
         double var27 = var0 + var6 * var22;
         double var32 = var4 + var10 * var22;
         if (var22 > var12
            && BlockIterator.FastMath.gEq(var27, 0.0)
            && BlockIterator.FastMath.sEq(var27, 1.0)
            && BlockIterator.FastMath.gEq(var32, 0.0)
            && BlockIterator.FastMath.sEq(var32, 1.0)) {
            var12 = var22;
         }
      }

      if (var10 < 0.0) {
         double var23 = -var4 / var10;
         double var28 = var0 + var6 * var23;
         double var33 = var2 + var8 * var23;
         if (var23 > var12
            && BlockIterator.FastMath.gEq(var28, 0.0)
            && BlockIterator.FastMath.sEq(var28, 1.0)
            && BlockIterator.FastMath.gEq(var33, 0.0)
            && BlockIterator.FastMath.sEq(var33, 1.0)) {
            var12 = var23;
         }
      } else if (var10 > 0.0) {
         double var24 = (1.0 - var4) / var10;
         double var29 = var0 + var6 * var24;
         double var34 = var2 + var8 * var24;
         if (var24 > var12
            && BlockIterator.FastMath.gEq(var29, 0.0)
            && BlockIterator.FastMath.sEq(var29, 1.0)
            && BlockIterator.FastMath.gEq(var34, 0.0)
            && BlockIterator.FastMath.sEq(var34, 1.0)) {
            var12 = var24;
         }
      }

      class="kw">return var12;
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BlockIteratorProcedure {
      boolean accept(int var1, int var2, int var3, double var4, double var6, double var8, double var10, double var12, double var14);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BlockIteratorProcedurePlus1<T> {
      boolean accept(int var1, int var2, int var3, double var4, double var6, double var8, double var10, double var12, double var14, T var16);
   }

   class="kw">static class FastMath {
      class="kw">static class="kw">final double TWO_POWER_52 = 4.5035996E15F;
      class="kw">static class="kw">final double ROUNDING_ERROR = 1.0E-15;

      FastMath() {
      }

      class="kw">static boolean eq(double var0, double var2) {
         class="kw">return abs(var0 - var2) < 1.0E-15;
      }

      class="kw">static boolean sEq(double var0, double var2) {
         class="kw">return var0 <= var2 + 1.0E-15;
      }

      class="kw">static boolean gEq(double var0, double var2) {
         class="kw">return var0 >= var2 - 1.0E-15;
      }

      class="kw">static double abs(double var0) {
         class="kw">return var0 < 0.0 ? -var0 : var0;
      }

      class="kw">static long fastFloor(double var0) {
         if (!(var0 >= 4.5035996E15F) && !(var0 <= -4.5035996E15F)) {
            long var2 = (long)var0;
            if (var0 < 0.0 && var2 != var0) {
               var2--;
            }

            class="kw">return var2 == 0L ? (long)(var0 * var2) : var2;
         } else {
            class="kw">return (long)var0;
         }
      }
   }
}