Riven class

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

Файл: com/hypixel/hytale/math/util/TrigMathUtil.java

Поля (9)

МодификаторыТипИмя
private static final float[] COS
private static final float[] SIN
private static final int SIN_BITS
private static final int SIN_COUNT
private static final int SIN_MASK
private static final float degFull
private static final float degToIndex
private static final float radFull
private static final float radToIndex

Методы (4)

МодификаторыВозвратСигнатура
public static float cospublic static float cos(float var0)
for for(int var0 = 0; var0 < SIN_COUNT; var0++)
for for(int var1 = 0; var1 < 360; var1 += 90)
public static float sinpublic static float sin(float var0)

Исходный код

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

class="kw">import javax.annotation.Nonnull;

class="kw">public class TrigMathUtil {
   class="kw">public class="kw">static class="kw">final float PI = (float) Math.PI;
   class="kw">public class="kw">static class="kw">final float PI_HALF = (float) (Math.PI / 2);
   class="kw">public class="kw">static class="kw">final float PI_QUARTER = (float) (Math.PI / 4);
   class="kw">public class="kw">static class="kw">final float PI2 = (float) (Math.PI * 2);
   class="kw">public class="kw">static class="kw">final float PI4 = (float) (Math.PI * 4);
   class="kw">public class="kw">static class="kw">final float radToDeg = 180.0F / (float)Math.PI;
   class="kw">public class="kw">static class="kw">final float degToRad = (float) (Math.PI / 180.0);

   class="kw">public class="kw">static float sin(float var0) {
      class="kw">return TrigMathUtil.Riven.sin(var0);
   }

   class="kw">public class="kw">static float cos(float var0) {
      class="kw">return TrigMathUtil.Riven.cos(var0);
   }

   class="kw">public class="kw">static float sin(double var0) {
      class="kw">return TrigMathUtil.Riven.sin((float)var0);
   }

   class="kw">public class="kw">static float cos(double var0) {
      class="kw">return TrigMathUtil.Riven.cos((float)var0);
   }

   class="kw">public class="kw">static float atan2(float var0, float var1) {
      class="kw">return TrigMathUtil.Icecore.atan2(var0, var1);
   }

   class="kw">public class="kw">static float atan2(double var0, double var2) {
      class="kw">return TrigMathUtil.Icecore.atan2((float)var0, (float)var2);
   }

   class="kw">public class="kw">static float atan(double var0) {
      class="kw">return (float)Math.atan(var0);
   }

   class="kw">public class="kw">static float asin(double var0) {
      class="kw">return (float)Math.asin(var0);
   }

   class="kw">private TrigMathUtil() {
   }

   class="kw">private class="kw">static class="kw">final class Icecore {
      class="kw">private class="kw">static class="kw">final int SIZE_AC = 100000;
      class="kw">private class="kw">static class="kw">final int SIZE_AR = 100001;
      class="kw">private class="kw">static class="kw">final float[] ATAN2 = new float[100001];

      class="kw">private Icecore() {
      }

      class="kw">public class="kw">static float atan2(float var0, float var1) {
         if (var0 < 0.0F) {
            if (var1 < 0.0F) {
               class="kw">return var0 < var1 ? -ATAN2[(int)(var1 / var0 * 100000.0F)] - (float) (Math.PI / 2) : ATAN2[(int)(var0 / var1 * 100000.0F)] - (float) Math.PI;
            }

            var0 = -var0;
            class="kw">return var0 > var1 ? ATAN2[(int)(var1 / var0 * 100000.0F)] - (float) (Math.PI / 2) : -ATAN2[(int)(var0 / var1 * 100000.0F)];
         } else if (var1 < 0.0F) {
            var1 = -var1;
            class="kw">return var0 > var1 ? ATAN2[(int)(var1 / var0 * 100000.0F)] + (float) (Math.PI / 2) : -ATAN2[(int)(var0 / var1 * 100000.0F)] + (float) Math.PI;
         } else {
            class="kw">return var0 > var1 ? -ATAN2[(int)(var1 / var0 * 100000.0F)] + (float) (Math.PI / 2) : ATAN2[(int)(var0 / var1 * 100000.0F)];
         }
      }

      class="kw">static {
         for (int var0 = 0; var0 <= 100000; var0++) {
            double var1 = var0 / 100000.0;
            double var3 = 1.0;
            double var5 = var3 * var1;
            float var7 = (float)Math.atan2(var5, var3);
            ATAN2[var0] = var7;
         }
      }
   }

   class="kw">private class="kw">static class="kw">final class Riven {
      class="kw">private class="kw">static class="kw">final int SIN_BITS = 12;
      class="kw">private class="kw">static class="kw">final int SIN_MASK = ~(-1 << SIN_BITS);
      class="kw">private class="kw">static class="kw">final int SIN_COUNT = SIN_MASK + 1;
      class="kw">private class="kw">static class="kw">final float radFull = (float) (Math.PI * 2);
      class="kw">private class="kw">static class="kw">final float radToIndex = SIN_COUNT / radFull;
      class="kw">private class="kw">static class="kw">final float degFull = 360.0F;
      class="kw">private class="kw">static class="kw">final float degToIndex = SIN_COUNT / degFull;
      @Nonnull
      class="kw">private class="kw">static class="kw">final float[] SIN = new float[SIN_COUNT];
      @Nonnull
      class="kw">private class="kw">static class="kw">final float[] COS = new float[SIN_COUNT];

      class="kw">private Riven() {
      }

      class="kw">public class="kw">static float sin(float var0) {
         class="kw">return SIN[(int)(var0 * radToIndex) & SIN_MASK];
      }

      class="kw">public class="kw">static float cos(float var0) {
         class="kw">return COS[(int)(var0 * radToIndex) & SIN_MASK];
      }

      class="kw">static {
         for (int var0 = 0; var0 < SIN_COUNT; var0++) {
            SIN[var0] = (float)Math.sin((var0 + 0.5F) / SIN_COUNT * radFull);
            COS[var0] = (float)Math.cos((var0 + 0.5F) / SIN_COUNT * radFull);
         }

         for (int var1 = 0; var1 < 360; var1 += 90) {
            SIN[(int)(var1 * degToIndex) & SIN_MASK] = (float)Math.sin(var1 * Math.PI / 180.0);
            COS[(int)(var1 * degToIndex) & SIN_MASK] = (float)Math.cos(var1 * Math.PI / 180.0);
         }
      }
   }
}