Orbital elements: Difference between revisions
Content added Content deleted
m (added a ;Task: (bold) header.) |
(Added Sidef) |
||
Line 163: | Line 163: | ||
{{out}} |
{{out}} |
||
<pre>{position => 0.237771283982207*e0+0.860960261697716*e1+0.110509023572076*e2, speed => -1.06193301748006*e0+0.27585002056925*e1+0.135747024865598*e2}</pre> |
<pre>{position => 0.237771283982207*e0+0.860960261697716*e1+0.110509023572076*e2, speed => -1.06193301748006*e0+0.27585002056925*e1+0.135747024865598*e2}</pre> |
||
=={{header|Sidef}}== |
|||
{{trans|Perl}} |
|||
<lang ruby>func orbital_state_vectors( |
|||
semimajor_axis, |
|||
eccentricity, |
|||
inclination, |
|||
longitude_of_ascending_node, |
|||
argument_of_periapsis, |
|||
true_anomaly |
|||
) { |
|||
var (i, j, k) = (vec.V(1,0,0), vec.V(0,1,0), vec.V(0,0,1)) |
|||
func muladd(v1, x1, v2, x2) { |
|||
v1.mul(x1).add(v2.mul(x2)) |
|||
} |
|||
func rotate(Ref i, Ref j, α) { |
|||
(*i, *j) = ( |
|||
muladd(*i, +cos(α), *j, sin(α)), |
|||
muladd(*i, -sin(α), *j, cos(α)), |
|||
) |
|||
} |
|||
rotate(\i, \j, longitude_of_ascending_node) |
|||
rotate(\j, \k, inclination) |
|||
rotate(\i, \j, argument_of_periapsis) |
|||
var l = (eccentricity == 1 ? 2*semimajor_axis |
|||
: semimajor_axis*(1 - eccentricity**2)) |
|||
var (c, s) = given(true_anomaly) { (.cos, .sin) } |
|||
var r = l/(1 + eccentricity*c) |
|||
var rprime = (s * r**2 / l) |
|||
var position = muladd(i, c, j, s).mul(r) |
|||
var speed = muladd(i, rprime*c - r*s, j, rprime*s + r*c) |
|||
speed.div!(abs(speed)) |
|||
speed.mul!(sqrt(2/r - 1/semimajor_axis)) |
|||
struct Result { position, speed } |
|||
Result([position,speed].map {|v| [v{:module}[]] }...) |
|||
} |
|||
var r = orbital_state_vectors( |
|||
semimajor_axis: 1, |
|||
eccentricity: 0.1, |
|||
inclination: 0, |
|||
longitude_of_ascending_node: 355/(113*6), |
|||
argument_of_periapsis: 0, |
|||
true_anomaly: 0, |
|||
) |
|||
say r.position |
|||
say r.speed</lang> |
|||
{{out}} |
|||
<pre> |
|||
[0.77942284339868, 0.450000034653684, 0] |
|||
[-0.552770840960444, 0.957427083179761, 0] |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |