Orbital Mechanics

mathematica

Mathematica® Code for Graphing the Velocity Vector for an Elliptic Orbit. gpl3 logo

Written by Professor Sasan Ardalan.

elliptic_orbit_velocity

Mathematica® Source Code gpl3 logo Linkmathematica_logo.



       
 (* Copyright (C)2024 Sasan Ardalan                                      *)
 (* This program is free software:you can redistribute it and/or modify  *)
(* it under the terms of the GNU General Public License as   published by*)
(* the Free Software Foundation,either version 3 of the License,or       *)
(*(at your option) any later version.This program is distributed         *)
(* in the hope that it will be useful,but WITHOUT ANY WARRANTY           *)
(* without even the implied warranty of                                  *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the           *)
(* GNU General Public License for more details.You should have           *)
(* received a copy of the GNU General Public License                     *)
(* along with this program.If not,see.     *)


(* Velocity Vector for Elliptic Orbits           *)
(* Orbital Mechanics                             *)
(* Author: Sasan Ardalan                         *)
(* ScientificWorks.org                           *)
(* Date: September 10, 2024                      *)



p = 1.0
e = 0.6
f[theta_] := p/(1 + e*Cos[theta])

PolarPlot[f[theta], {theta, 0, 2*Pi}]


dyDivdx[theta_] := ( 
   e*(Sin[theta])^2 + 
    f[theta]*Cos[theta]*(1 + e*Cos[theta])^2)/(e*Sin[theta]*
     Cos[theta] - f[theta]*Sin[theta]*(1 + e*Cos[theta])^2)



arrows = {}
delTheta = 0.1*Pi
theta = 0;
For[i = 0, i < 20, i++,
 theta = theta + delTheta;
 (*theta=Pi*(0.1); *)
 
 (* Print["Theta:",theta]; *)
 m = dyDivdx[theta];
 (* Print["Slope m:",m]; *) 
 r = f[theta];
 x0 = r*Cos[theta];
 y0 = r*Sin[theta];
  
 (* Print["x0=",x0," y0=", y0]; *)
 n = y0 - m*x0;
 ftan[x_] := m*x + n;
 x = x0;
 yy = ftan[x0];
 (* Print["x0==",x0," yy=", y0]; *)
 (*Plot[ftan[x],{x,-4,2}]*)
 
 lenF = 0.4;
 ra = 1/(1 + e);
 rb = 1/(1 - e);
 a = (ra + rb)/2;
 (* Print["a first=",a]*)
 a = 1/(1 - e^2);
 (* Print["a=",a]; *)
 velocity = Sqrt[(2*a - r)/(r*a)];
 (*Print ["Velocity =",velocity]; *)
 
 deltax = lenF/Sqrt[1 + m^2]*velocity;
 x11 = If[m < 0, x0 - deltax, x0];
 x22 = If[m < 0, x0, x0 + deltax];

 x1 = x11;
 x2 = x22;
 (*Print["x0=",x0,"   x1=",x1,"   x2=",x2];*)
 
 arrows = 
  If[theta > Pi, 
   Append[arrows, Arrow[{{x1, ftan[x1]}, {x2, ftan[x2]} }]], 
   Append[arrows, Arrow[{{x2, ftan[x2]}, {x1, ftan[x1]} }]]]
 
 
 ] 

Show[PolarPlot[f[theta], {theta, 0, 2*Pi}], Graphics[arrows]]