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;
}
}
}
}