Orbital elements: Difference between revisions
Content deleted Content added
Added Go |
m →{{header|Java}}: Fixed 'long lines' problem. |
||
Line 210:
=={{header|Java}}==
{{trans|Kotlin}}
<lang Java>public class OrbitalElements {
private static class Vector {
private double x, y, z;
public Vector(double x, double y, double z) {
this.x = x;
Line 221 ⟶ 220:
this.z = z;
}
public Vector plus(Vector rhs) {
return new Vector(x + rhs.x, y + rhs.y, z + rhs.z);
}
public Vector times(double s) {
return new Vector(s * x, s * y, s * z);
}
public Vector div(double d) {
return new Vector(x / d, y / d, z / d);
}
public double abs() {
return Math.sqrt(x * x + y * y + z * z);
}
@Override
public String toString() {
Line 243 ⟶ 242:
}
}
private static Vector mulAdd(Vector v1, Double x1, Vector v2, Double x2) {
return v1.times(x1).plus(v2.times(x2));
}
private static Vector[] rotate(Vector i, Vector j, double alpha) {
return new Vector[]{
Line 254 ⟶ 253:
};
}
private static Vector[] orbitalStateVectors(
double semimajorAxis, double eccentricity,
double inclination, double longitudeOfAscendingNode,
double argumentOfPeriapsis, double trueAnomaly
) {
Vector i = new Vector(1, 0, 0);
Vector j = new Vector(0, 1, 0);
Vector k = new Vector(0, 0, 1);
Vector[] p = rotate(i, j, longitudeOfAscendingNode);
i = p[0];
Line 268 ⟶ 271:
i = p[0];
j = p[1];
double l =
l *= semimajorAxis;
double c = Math.cos(trueAnomaly);
double s = Math.sin(trueAnomaly);
Line 278 ⟶ 282:
speed = speed.div(speed.abs());
speed = speed.times(Math.sqrt(2.0 / r - 1.0 / semimajorAxis));
return new Vector[]{position, speed};
}
public static void main(String[] args) {
Vector[] ps = orbitalStateVectors(1.0, 0.1, 0.0, 355.0 / (113.0 * 6.0), 0.0, 0.0);
Line 288 ⟶ 292:
}
}</lang>
{{out}}
<pre>Position : (0.7794228433986797, 0.4500000346536842, 0.0000000000000000)
|