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

View file

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