Worked on using sphere cords for orbit calcs (untested)
This commit is contained in:
parent
c3684dc952
commit
10788a58b2
2 changed files with 24 additions and 12 deletions
|
@ -1,19 +1,30 @@
|
||||||
package dark.library.math;
|
package dark.library.math;
|
||||||
|
|
||||||
import universalelectricity.core.vector.Vector3;
|
import universalelectricity.core.vector.Vector3;
|
||||||
import dark.library.helpers.Pair;
|
|
||||||
|
|
||||||
public class LinearAlg
|
public class LinearAlg
|
||||||
{
|
{
|
||||||
public Pair<Double, Double> vecToSphereAngles(Vector3 vec)
|
/**
|
||||||
|
* @param vec - vector3 that is on the sphere
|
||||||
|
* @return new Vector3(radius, inclination, azimuth)
|
||||||
|
*/
|
||||||
|
public static Vector3 vecToSphereAngles(Vector3 vec)
|
||||||
{
|
{
|
||||||
double radius = Math.sqrt((vec.x * vec.x) + (vec.y * vec.y) + (vec.z * vec.z));
|
double radius = Math.sqrt((vec.x * vec.x) + (vec.y * vec.y) + (vec.z * vec.z));
|
||||||
double inclination = Math.acos(vec.z / radius);
|
double inclination = Math.acos(vec.z / radius);
|
||||||
double azimuth = Math.atan(vec.y / vec.z);
|
double azimuth = Math.atan(vec.y / vec.z);
|
||||||
return new Pair<Double, Double>(inclination, azimuth);
|
return new Vector3(radius, inclination, azimuth);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3 sphereAnglesToVec(Double radius, Double inclination, Double azimuth)
|
/**
|
||||||
|
* Turns radius and sphere cords into a vector3
|
||||||
|
*
|
||||||
|
* @param radius - sphere radius
|
||||||
|
* @param inclination -
|
||||||
|
* @param azimuth
|
||||||
|
* @return Vector3(x,y,z)
|
||||||
|
*/
|
||||||
|
public static Vector3 sphereAnglesToVec(Double radius, Double inclination, Double azimuth)
|
||||||
{
|
{
|
||||||
double x = radius * Math.sin(inclination) * Math.cos(azimuth);
|
double x = radius * Math.sin(inclination) * Math.cos(azimuth);
|
||||||
double y = radius * Math.sin(inclination) * Math.sin(azimuth);
|
double y = radius * Math.sin(inclination) * Math.sin(azimuth);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Iterator;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import dark.library.helpers.Pair;
|
import dark.library.helpers.Pair;
|
||||||
|
import dark.library.math.LinearAlg;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import universalelectricity.core.vector.Vector3;
|
import universalelectricity.core.vector.Vector3;
|
||||||
|
@ -22,7 +23,7 @@ public class NetworkOrbit
|
||||||
public static int maxObjects = 20;
|
public static int maxObjects = 20;
|
||||||
|
|
||||||
/* CURRENT RADIUS OF THE CIRCLE */
|
/* CURRENT RADIUS OF THE CIRCLE */
|
||||||
float orbitRadius;
|
Double orbitRadius;
|
||||||
|
|
||||||
/* CHANGE IN ROTATION OF THE CIRCLE X Y Z */
|
/* CHANGE IN ROTATION OF THE CIRCLE X Y Z */
|
||||||
Vector3 rotationChange = new Vector3(0, 0, 0);
|
Vector3 rotationChange = new Vector3(0, 0, 0);
|
||||||
|
@ -97,7 +98,7 @@ public class NetworkOrbit
|
||||||
/**
|
/**
|
||||||
* Ideal minimal radius needed for the number of objects
|
* Ideal minimal radius needed for the number of objects
|
||||||
*/
|
*/
|
||||||
public float getMinRadius()
|
public double getMinRadius()
|
||||||
{
|
{
|
||||||
float width = 0;
|
float width = 0;
|
||||||
Iterator<Entry<IOrbitingEntity, Integer>> it = this.getOrbitMemebers().entrySet().iterator();
|
Iterator<Entry<IOrbitingEntity, Integer>> it = this.getOrbitMemebers().entrySet().iterator();
|
||||||
|
@ -125,15 +126,15 @@ public class NetworkOrbit
|
||||||
*/
|
*/
|
||||||
public Vector3 getOrbitOffset(int pos)
|
public Vector3 getOrbitOffset(int pos)
|
||||||
{
|
{
|
||||||
float minRadius = this.getMinRadius();
|
double minRadius = this.getMinRadius();
|
||||||
if (this.orbitRadius < minRadius)
|
if (this.orbitRadius < minRadius)
|
||||||
{
|
{
|
||||||
this.orbitRadius = minRadius;
|
this.orbitRadius = minRadius;
|
||||||
}
|
}
|
||||||
float spacing = this.orbitRadius / this.getOrbitMemebers().size();
|
double spacing = this.orbitRadius / this.getOrbitMemebers().size();
|
||||||
|
|
||||||
double x = this.orbitRadius * Math.cos((spacing * pos) + this.getRotation().y);
|
double inclination = 0;
|
||||||
double z = this.orbitRadius * Math.sin((spacing * pos) + this.getRotation().y);
|
double azimuth = (spacing * pos) + this.getRotation().y;
|
||||||
return null;
|
return LinearAlg.sphereAnglesToVec(this.orbitRadius, inclination, azimuth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue