OpposedToGraphEdgesVectorProvider class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.vectorproviders
Файл: com/hypixel/hytale/builtin/hytalegenerator/vectorproviders/OpposedToGraphEdgesVectorProvider.java
extends: VectorProvider
Поля (50)
| Модификаторы | Тип | Имя |
|---|---|---|
|
double |
var10 |
|
|
var10 |
|
|
var10 |
|
|
var10 |
|
double |
var11 |
|
|
var11 |
|
GraphSpace.Node |
var12 |
|
double |
var12 |
|
|
var12 |
|
|
var12 |
|
|
var12 |
|
double |
var13 |
|
double |
var14 |
|
Vector3d |
var14 |
|
double |
var14 |
|
double |
var15 |
|
double |
var15 |
|
double |
var16 |
|
double |
var16 |
|
double |
var17 |
|
double |
var18 |
|
double |
var18 |
|
double |
var19 |
|
double |
var2 |
|
Vector3d |
var2 |
|
double |
var21 |
|
double |
var22 |
|
double |
var24 |
|
double |
var26 |
|
double |
var28 |
|
GraphSpace.Node |
var3 |
|
double |
var30 |
|
double |
var32 |
|
double |
var34 |
|
double |
var36 |
|
double |
var38 |
|
double |
var4 |
|
double |
var4 |
|
Vector3d |
var41 |
|
Vector3d |
var43 |
|
Vector3d |
var44 |
|
double |
var6 |
|
double |
var6 |
|
double |
var7 |
|
double |
var8 |
|
double |
var8 |
|
|
var8 |
|
|
var8 |
|
|
var8 |
|
double |
var9 |
Методы (12)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var40 = 0; var40 < this.rDirectionCount; var40++) |
|
|
for for(int var42 = var40 + 1; var42 < this.rDirectionCount; var42++) |
|
|
for for(int var20 = var42 + 1; var20 < this.rDirectionCount; var20++) |
|
|
for for(int var13 = 0; var13 < this.rDirectionCount; var13++) |
|
|
if if(var3 == null) |
|
|
if if(this.rDirectionCount == 0) |
|
|
if if(var14 * var14 + var16 * var16 + var18 * var18 < 1.0E-12) |
|
|
if if(var15 > var11) |
|
|
if if(var11 < this.rBestCost) |
|
|
if if(var2 <= var4 && var2 <= var6) |
private |
void |
tryCandidatevoid tryCandidate(double var1, double var3, double var5) |
private |
void |
tryPerpendicularsvoid tryPerpendiculars(@Nonnull Vector3d var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.vectorproviders;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.graph.GraphSpace;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class OpposedToGraphEdgesVectorProvider class="kw">extends VectorProvider {
@Nonnull
class="kw">private class="kw">static class="kw">final Vector3d DEFAULT_VECTOR = new Vector3d(0.0, 1.0, 0.0);
class="kw">private class="kw">static class="kw">final double EPSILON_SQUARED = 1.0E-12;
@Nonnull
class="kw">private class="kw">final List<Vector3d> rDirections = new ArrayList<>();
@Nonnull
class="kw">private class="kw">final Vector3d rCandidate = new Vector3d();
@Nonnull
class="kw">private class="kw">final Vector3d rBest = new Vector3d();
class="kw">private int rDirectionCount;
class="kw">private double rBestCost;
class="kw">public OpposedToGraphEdgesVectorProvider() {
}
@Override
class="kw">public void process(@Nonnull VectorProvider.Context var1, @Nonnull Vector3d var2) {
GraphSpace.Node var3 = var1.graphNode;
if (var3 == null) {
var2.set(DEFAULT_VECTOR);
} else {
this.rDirectionCount = 0;
double var4 = var3.position().x();
double var6 = var3.position().y();
double var8 = var3.position().z();
for (GraphSpace.Edge var11 : var3.edges()) {
GraphSpace.Node var12 = var11.otherNode(var3);
double var13 = var12.position().x() - var4;
double var15 = var12.position().y() - var6;
double var17 = var12.position().z() - var8;
double var19 = var13 * var13 + var15 * var15 + var17 * var17;
if (!(var19 < 1.0E-12)) {
double var21 = 1.0 / Math.sqrt(var19);
this.slot(this.rDirectionCount).set(var13 * var21, var15 * var21, var17 * var21);
this.rDirectionCount++;
}
}
if (this.rDirectionCount == 0) {
var2.set(DEFAULT_VECTOR);
} else {
this.rBestCost = Double.POSITIVE_INFINITY;
this.rBest.set(DEFAULT_VECTOR);
for (int var40 = 0; var40 < this.rDirectionCount; var40++) {
Vector3d var41 = this.rDirections.get(var40);
this.tryCandidate(-var41.x, -var41.y, -var41.z);
for (int var42 = var40 + 1; var42 < this.rDirectionCount; var42++) {
Vector3d var43 = this.rDirections.get(var42);
double var14 = var41.x + var43.x;
double var16 = var41.y + var43.y;
double var18 = var41.z + var43.z;
if (var14 * var14 + var16 * var16 + var18 * var18 < 1.0E-12) {
this.tryPerpendiculars(var41);
} else {
this.tryCandidate(-var14, -var16, -var18);
}
for (int var20 = var42 + 1; var20 < this.rDirectionCount; var20++) {
Vector3d var44 = this.rDirections.get(var20);
double var22 = var41.x - var43.x;
double var24 = var41.y - var43.y;
double var26 = var41.z - var43.z;
double var28 = var41.x - var44.x;
double var30 = var41.y - var44.y;
double var32 = var41.z - var44.z;
double var34 = var24 * var32 - var26 * var30;
double var36 = var26 * var28 - var22 * var32;
double var38 = var22 * var30 - var24 * var28;
this.tryCandidate(var34, var36, var38);
this.tryCandidate(-var34, -var36, -var38);
}
}
}
var2.set(this.rBest);
}
}
}
class="kw">private void tryCandidate(double var1, double var3, double var5) {
double var7 = var1 * var1 + var3 * var3 + var5 * var5;
if (!(var7 < 1.0E-12)) {
double var9 = 1.0 / Math.sqrt(var7);
this.rCandidate.set(var1 * var9, var3 * var9, var5 * var9);
double var11 = Double.NEGATIVE_INFINITY;
for (int var13 = 0; var13 < this.rDirectionCount; var13++) {
Vector3d var14 = this.rDirections.get(var13);
double var15 = this.rCandidate.x * var14.x + this.rCandidate.y * var14.y + this.rCandidate.z * var14.z;
if (var15 > var11) {
var11 = var15;
}
}
if (var11 < this.rBestCost) {
this.rBestCost = var11;
this.rBest.set(this.rCandidate);
}
}
}
class="kw">private void tryPerpendiculars(@Nonnull Vector3d var1) {
double var2 = Math.abs(var1.x);
double var4 = Math.abs(var1.y);
double var6 = Math.abs(var1.z);
double var8;
double var10;
double var12;
if (var2 <= var4 && var2 <= var6) {
var8 = 1.0;
var10 = 0.0;
var12 = 0.0;
} else if (var4 <= var6) {
var8 = 0.0;
var10 = 1.0;
var12 = 0.0;
} else {
var8 = 0.0;
var10 = 0.0;
var12 = 1.0;
}
double var14 = var1.y * var12 - var1.z * var10;
double var16 = var1.z * var8 - var1.x * var12;
double var18 = var1.x * var10 - var1.y * var8;
this.tryCandidate(var14, var16, var18);
this.tryCandidate(var1.y * var18 - var1.z * var16, var1.z * var14 - var1.x * var18, var1.x * var16 - var1.y * var14);
}
@Nonnull
class="kw">private Vector3d slot(int var1) {
if (var1 < this.rDirections.size()) {
class="kw">return this.rDirections.get(var1);
}
Vector3d var2 = new Vector3d();
this.rDirections.add(var2);
class="kw">return var2;
}
}