Operation3i interface

Пакет: com.hypixel.hytale.builtin.hytalegenerator

Файл: com/hypixel/hytale/builtin/hytalegenerator/VectorUtil.java

Методы (1)

МодификаторыВозвратСигнатура
abstract int runint run(int var1, @Nonnull VectorUtil.Retriever var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.math.Calculator;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import it.unimi.dsi.fastutil.doubles.DoubleObjectPair;
class="kw">import java.math.BigDecimal;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector2d;
class="kw">import org.joml.Vector2i;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class VectorUtil {
   class="kw">public VectorUtil() {
   }

   @Nonnull
   class="kw">public class="kw">static String toString(@Nonnull Vector3dc var0) {
      class="kw">return "{x="
         + BigDecimal.valueOf(var0.x()).toPlainString()
         + ", y="
         + BigDecimal.valueOf(var0.y()).toPlainString()
         + ", z="
         + BigDecimal.valueOf(var0.z()).toPlainString()
         + "}";
   }

   @Nonnull
   class="kw">public class="kw">static String toString(@Nonnull Vector3ic var0) {
      class="kw">return "{x=" + var0.x() + ", y=" + var0.y() + ", z=" + var0.z() + "}";
   }

   class="kw">public class="kw">static void nextDown(@Nonnull Vector3d var0) {
      var0.x = Math.nextDown(var0.x);
      var0.y = Math.nextDown(var0.y);
      var0.z = Math.nextDown(var0.z);
   }

   class="kw">public class="kw">static void orthogonalVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      if (isZero(var0)) {
         var1.set(0.0);
      } else {
         double var2 = Math.abs(var0.x);
         double var4 = Math.abs(var0.y);
         double var6 = Math.abs(var0.z);
         if (var2 >= var4 && var2 >= var6) {
            var1.set(var0.y, -var0.x, 0.0);
         } else if (var4 >= var2 && var4 >= var6) {
            var1.set(0.0, var0.z, -var0.y);
         } else {
            var1.set(-var0.z, 0.0, var0.x);
         }
      }
   }

   class="kw">public class="kw">static boolean isZero(@Nonnull Vector3dc var0) {
      class="kw">return var0.x() == 0.0 && var0.y() == 0.0 && var0.z() == 0.0;
   }

   class="kw">public class="kw">static boolean isZero(@Nonnull Vector3ic var0) {
      class="kw">return var0.x() == 0 && var0.y() == 0 && var0.z() == 0;
   }

   class="kw">public class="kw">static void assignFloored(@Nonnull Vector3i var0, @Nonnull Vector3d var1) {
      var0.x = (int)Math.floor(var1.x);
      var0.y = (int)Math.floor(var1.y);
      var0.z = (int)Math.floor(var1.z);
   }

   class="kw">public class="kw">static boolean areasOverlap(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
      class="kw">return isAnyGreater(var1, var2) && isAnySmaller(var0, var3);
   }

   class="kw">public class="kw">static double distanceToSegment3d(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Vector3dc var2) {
      Vector3d var3 = new Vector3d(var2).fma(-1.0, var1);
      Vector3d var4 = new Vector3d(var0).fma(-1.0, var1);
      double var5 = var3.length();
      Vector3d var7 = new Vector3d(var3).normalize(1.0);
      Vector3d var8 = new Vector3d(var4).mul(1.0 / var5);
      double var9 = var7.dot(var8);
      var9 = Calculator.clamp(0.0, var9, 1.0);
      Vector3d var11 = new Vector3d(var3).mul(var9);
      class="kw">return var11.distance(var4);
   }

   class="kw">public class="kw">static double distanceToLine3d(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      @Nonnull Vector3d var2,
      @Nonnull Vector3d var3,
      @Nonnull Vector3d var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6,
      @Nonnull Vector3d var7
   ) {
      var3.set(var2).sub(var1);
      var4.set(var0).sub(var1);
      double var8 = var3.length();
      var5.set(var3).normalize(1.0);
      var6.set(var4).mul(1.0 / var8);
      double var10 = var5.dot(var6);
      var7.set(var3).mul(var10);
      class="kw">return var7.distance(var4);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d nearestPointOnSegment3d(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      Vector3d var3 = new Vector3d(var2).fma(-1.0, var1);
      Vector3d var4 = new Vector3d(var0).fma(-1.0, var1);
      double var5 = var3.length();
      Vector3d var7 = new Vector3d(var3).normalize(1.0);
      Vector3d var8 = new Vector3d(var4).mul(1.0 / var5);
      double var9 = var7.dot(var8);
      var9 = Calculator.clamp(0.0, var9, 1.0);
      Vector3d var11 = new Vector3d(var3).mul(var9);
      class="kw">return var11.add(var1);
   }

   class="kw">public class="kw">static void nearestPointOnLine3d(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      @Nonnull Vector3d var2,
      @Nonnull Vector3d var3,
      @Nonnull Vector3d var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6,
      @Nonnull Vector3d var7
   ) {
      var4.set(var2).sub(var1);
      var5.set(var0).sub(var1);
      double var8 = var4.length();
      var6.set(var4).normalize(1.0);
      var7.set(var5).mul(1.0 / var8);
      double var10 = var6.dot(var7);
      var3.set(var4).mul(var10);
      var3.add(var1);
   }

   class="kw">public class="kw">static boolean[] shortestSegmentBetweenTwoSegments(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      @Nonnull Vector3d var2,
      @Nonnull Vector3d var3,
      boolean var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6
   ) {
      boolean[] var7 = new boolean[2];
      Vector3d var8 = new Vector3d(var1).fma(-1.0, var0);
      Vector3d var9 = new Vector3d(var3).fma(-1.0, var2);
      double var10 = var8.length();
      double var12 = var9.length();
      Vector3d var14 = new Vector3d(var8).mul(1.0 / var10);
      Vector3d var15 = new Vector3d(var9).mul(1.0 / var12);
      Vector3d var16 = var14.cross(var15, new Vector3d());
      double var17 = Math.pow(var16.length(), 2.0);
      if (var17 == 0.0) {
         var7[0] = true;
         double var32 = var14.dot(new Vector3d(var2).fma(-1.0, var0));
         if (var4) {
            double var21 = var14.dot(new Vector3d(var3).fma(-1.0, var0));
            if (var32 <= 0.0 && var21 <= 0.0) {
               if (Math.abs(var32) < Math.abs(var21)) {
                  var5.set(var0);
                  var6.set(var2);
                  var7[1] = true;
                  class="kw">return var7;
               }

               var5.set(var0);
               var6.set(var3);
               var7[1] = true;
               class="kw">return var7;
            }

            if (var32 >= var10 && var21 >= var10) {
               if (Math.abs(var32) < Math.abs(var21)) {
                  var5.set(var1);
                  var6.set(var2);
                  var7[1] = true;
                  class="kw">return var7;
               }

               var5.set(var1);
               var6.set(var3);
               var7[1] = true;
               class="kw">return var7;
            }
         }

         class="kw">return var7;
      } else {
         Vector3d var19 = new Vector3d(var2).fma(-1.0, var0);
         double var20 = determinant(var19, var15, var16);
         double var22 = determinant(var19, var14, var16);
         double var24 = var20 / var17;
         double var26 = var22 / var17;
         Vector3d var28 = new Vector3d(var14).mul(var24).add(var0);
         Vector3d var29 = new Vector3d(var15).mul(var26).add(var2);
         if (var4) {
            if (var24 < 0.0) {
               var28 = new Vector3d(var0);
            } else if (var24 > var10) {
               var28 = new Vector3d(var1);
            }

            if (var26 < 0.0) {
               var29 = new Vector3d(var2);
            } else if (var26 > var12) {
               var29 = new Vector3d(var3);
            }

            if (var24 < 0.0 || var24 > var10) {
               double var30 = var15.dot(new Vector3d(var28).fma(-1.0, var2));
               if (var30 < 0.0) {
                  var30 = 0.0;
               } else if (var30 > var12) {
                  var30 = var12;
               }

               var29 = new Vector3d(var2).add(new Vector3d(var15).mul(var30));
            }

            if (var26 < 0.0 || var26 > var12) {
               double var33 = var14.dot(new Vector3d(var29).fma(-1.0, var0));
               if (var33 < 0.0) {
                  var33 = 0.0;
               } else if (var33 > var10) {
                  var33 = var10;
               }

               var28 = new Vector3d(var0).add(new Vector3d(var14).mul(var33));
            }
         }

         var5.set(var28);
         var6.set(var29);
         var7[1] = true;
         class="kw">return var7;
      }
   }

   class="kw">public class="kw">static double determinant(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1) {
      Vector3d var2 = var0.cross(var1, new Vector3d());
      class="kw">return var2.length();
   }

   class="kw">public class="kw">static double determinant(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      double var3 = var0.x * var1.y * var2.z + var1.x * var2.y * var0.z + var2.x * var0.y * var1.z;
      class="kw">return var3 - (var0.z * var1.y * var2.x + var1.z * var2.y * var0.x + var2.z * var0.y * var1.x);
   }

   @Nonnull
   class="kw">public class="kw">static DoubleObjectPair<Vector3d> distanceAndNearestPointOnSegment3d(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      Vector3d var3 = new Vector3d(var2).fma(-1.0, var1);
      Vector3d var4 = new Vector3d(var0).fma(-1.0, var1);
      double var5 = var3.length();
      Vector3d var7 = new Vector3d(var3).normalize(1.0);
      Vector3d var8 = new Vector3d(var4).mul(1.0 / var5);
      double var9 = var7.dot(var8);
      var9 = Calculator.clamp(0.0, var9, 1.0);
      Vector3d var11 = new Vector3d(var3).mul(var9);
      class="kw">return DoubleObjectPair.of(var11.distance(var4), var11.add(var1));
   }

   class="kw">public class="kw">static double angle(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      double var2 = var0.x * var1.x + var0.y * var1.y + var0.z * var1.z;
      double var4 = Math.sqrt(var0.x * var0.x + var0.y * var0.y + var0.z * var0.z);
      double var6 = Math.sqrt(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z);
      class="kw">return Math.acos(var2 / (var4 * var6));
   }

   class="kw">public class="kw">static void rotateAroundAxis(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2) {
      Vector3d var4 = new Vector3d(var1);
      var4.normalize();
      double var5 = var4.x * (var4.x * var0.x + var4.y * var0.y + var4.z * var0.z) * (1.0 - Math.cos(var2))
         + var0.x * Math.cos(var2)
         + (-var4.z * var0.y + var4.y * var0.z) * Math.sin(var2);
      double var7 = var4.y * (var4.x * var0.x + var4.y * var0.y + var4.z * var0.z) * (1.0 - Math.cos(var2))
         + var0.y * Math.cos(var2)
         + (var4.z * var0.x - var4.x * var0.z) * Math.sin(var2);
      double var9 = var4.z * (var4.x * var0.x + var4.y * var0.y + var4.z * var0.z) * (1.0 - Math.cos(var2))
         + var0.z * Math.cos(var2)
         + (-var4.y * var0.x + var4.x * var0.y) * Math.sin(var2);
      var0.x = var5;
      var0.y = var7;
      var0.z = var9;
   }

   class="kw">public class="kw">static void rotateVectorByAxisAngle(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2) {
      Vector3d var10 = var1.cross(var0, new Vector3d());
      double var11 = Math.cos(var2);
      double var13 = Math.sin(var2);
      double var4 = var0.x * var11 + var10.x * var13 + var1.x * var1.dot(var0) * (1.0 - var11);
      double var6 = var0.y * var11 + var10.y * var13 + var1.y * var1.dot(var0) * (1.0 - var11);
      double var8 = var0.z * var11 + var10.z * var13 + var1.z * var1.dot(var0) * (1.0 - var11);
      var0.x = var4;
      var0.y = var6;
      var0.z = var8;
   }

   class="kw">public class="kw">static boolean isInside(@Nonnull Vector3i var0, @Nonnull Vector3i var1, @Nonnull Vector3i var2) {
      class="kw">return var0.x >= var1.x && var0.x < var2.x && var0.y >= var1.y && var0.y < var2.y && var0.z >= var1.z && var0.z < var2.z;
   }

   class="kw">public class="kw">static boolean isInside(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return !isAnySmaller(var0, var1) && isSmaller(var0, var2);
   }

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y || var0.z < var1.z;
   }

   class="kw">public class="kw">static boolean isSmaller(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return var0.x < var1.x && var0.y < var1.y && var0.z < var1.z;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y || var0.z > var1.z;
   }

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector3i var0, @Nonnull Vector3i var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y || var0.z < var1.z;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector3i var0, @Nonnull Vector3i var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y || var0.z > var1.z;
   }

   class="kw">public class="kw">static boolean isInside(@Nonnull Vector2d var0, @Nonnull Vector2d var1, @Nonnull Vector2d var2) {
      class="kw">return !isAnySmaller(var0, var1) && isSmaller(var0, var2);
   }

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector2d var0, @Nonnull Vector2d var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isSmaller(@Nonnull Vector2d var0, @Nonnull Vector2d var1) {
      class="kw">return var0.x < var1.x && var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector2d var0, @Nonnull Vector2d var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y;
   }

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector2i var0, @Nonnull Vector2i var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isSmaller(@Nonnull Vector2i var0, @Nonnull Vector2i var1) {
      class="kw">return var0.x < var1.x && var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector2i var0, @Nonnull Vector2i var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3i fromOperation(@Nonnull Vector3i var0, @Nonnull Vector3i var1, @Nonnull VectorUtil.BiOperation3i var2) {
      class="kw">return new Vector3i(
         var2.run(var0.x, var1.x, VectorUtil.Retriever.ofIndex(0)),
         var2.run(var0.y, var1.y, VectorUtil.Retriever.ofIndex(1)),
         var2.run(var0.z, var1.z, VectorUtil.Retriever.ofIndex(2))
      );
   }

   @Nonnull
   class="kw">public class="kw">static Vector3i fromOperation(@Nonnull VectorUtil.NakedOperation3i var0) {
      class="kw">return new Vector3i(var0.run(VectorUtil.Retriever.ofIndex(0)), var0.run(VectorUtil.Retriever.ofIndex(1)), var0.run(VectorUtil.Retriever.ofIndex(2)));
   }

   class="kw">public class="kw">static void bitShiftRight(int var0, @Nonnull Vector3i var1) {
      if (var0 < 0) {
         throw new IllegalArgumentException("negative shift");
      }

      var1.x >>= var0;
      var1.y >>= var0;
      var1.z >>= var0;
   }

   class="kw">public class="kw">static void bitShiftLeft(int var0, @Nonnull Vector3i var1) {
      if (var0 < 0) {
         throw new IllegalArgumentException("negative shift");
      }

      var1.x <<= var0;
      var1.y <<= var0;
      var1.z <<= var0;
   }

   @Nonnull
   class="kw">public class="kw">static List<Vector2i> orderByDistanceFrom(@Nonnull Vector2i var0, @Nonnull List<Vector2i> var1) {
      ArrayList var2 = new ArrayList<>(var1.size());

      for (int var3 = 0; var3 < var1.size(); var3++) {
         Vector2i var4 = var1.get(var3);
         double var5 = Calculator.distance(var4.x, var4.y, var0.x, var0.y);
         var2.add(Pair.of(var5, var4));
      }

      var2.sort(Comparator.comparingDouble(Pair::first));
      ArrayList var7 = new ArrayList<>(var2.size());

      for (Pair var9 : var2) {
         var7.add((Vector2i)var9.second());
      }

      class="kw">return var7;
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BiOperation3i {
      int run(int var1, int var2, @Nonnull VectorUtil.Retriever var3);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface NakedOperation3i {
      int run(@Nonnull VectorUtil.Retriever var1);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface Operation3i {
      int run(int var1, @Nonnull VectorUtil.Retriever var2);
   }

   class="kw">public class="kw">static class Retriever {
      class="kw">private int index;

      class="kw">public Retriever(int var1) {
         this.index = var1;
      }

      @Nonnull
      class="kw">public class="kw">static VectorUtil.Retriever ofIndex(int var0) {
         class="kw">return new VectorUtil.Retriever(var0);
      }

      class="kw">public int getIndex() {
         class="kw">return this.index;
      }

      class="kw">public int from(@Nonnull Vector3i var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            case 2 -> var1.z;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }

      class="kw">public int from(@Nonnull Vector2i var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }

      class="kw">public double from(@Nonnull Vector3d var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            case 2 -> var1.z;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }

      class="kw">public double from(@Nonnull Vector2d var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }
   }
}