Worked on using sphere cords for orbit calcs (untested)

This commit is contained in:
Robert Seifert 2013-06-05 03:27:06 -04:00
parent c3684dc952
commit 10788a58b2
2 changed files with 24 additions and 12 deletions

View file

@ -1,19 +1,30 @@
package dark.library.math;
import universalelectricity.core.vector.Vector3;
import dark.library.helpers.Pair;
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 inclination = Math.acos(vec.z / radius);
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 y = radius * Math.sin(inclination) * Math.sin(azimuth);

View file

@ -5,6 +5,7 @@ import java.util.Iterator;
import java.util.Map.Entry;
import dark.library.helpers.Pair;
import dark.library.math.LinearAlg;
import net.minecraft.entity.Entity;
import universalelectricity.core.vector.Vector3;
@ -22,7 +23,7 @@ public class NetworkOrbit
public static int maxObjects = 20;
/* CURRENT RADIUS OF THE CIRCLE */
float orbitRadius;
Double orbitRadius;
/* CHANGE IN ROTATION OF THE CIRCLE X Y Z */
Vector3 rotationChange = new Vector3(0, 0, 0);
@ -97,7 +98,7 @@ public class NetworkOrbit
/**
* Ideal minimal radius needed for the number of objects
*/
public float getMinRadius()
public double getMinRadius()
{
float width = 0;
Iterator<Entry<IOrbitingEntity, Integer>> it = this.getOrbitMemebers().entrySet().iterator();
@ -125,15 +126,15 @@ public class NetworkOrbit
*/
public Vector3 getOrbitOffset(int pos)
{
float minRadius = this.getMinRadius();
double minRadius = this.getMinRadius();
if (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 z = this.orbitRadius * Math.sin((spacing * pos) + this.getRotation().y);
return null;
double inclination = 0;
double azimuth = (spacing * pos) + this.getRotation().y;
return LinearAlg.sphereAnglesToVec(this.orbitRadius, inclination, azimuth);
}
}