Line | |
---|
1 | function [R,V,v] = keplerToCarthezian(I,Omega,w,a,ecc,M,tol)
|
---|
2 |
|
---|
3 | if nargin < 6 || nargin > 7
|
---|
4 | error('Incorrect number of inputs')
|
---|
5 | elseif nargin == 6
|
---|
6 | tol = 10^-8;
|
---|
7 | end
|
---|
8 |
|
---|
9 | mu_sun = 132712440018; %km^3/s^2
|
---|
10 |
|
---|
11 | E = CalcEA(M,ecc);
|
---|
12 | nu = nuFromM(M,ecc,tol);
|
---|
13 | r = a * (1 - ecc*ecc)/(1+ecc*cos(nu));
|
---|
14 | p = a * (1 - ecc*ecc);
|
---|
15 |
|
---|
16 | rx = r * (cos(Omega)*cos(w+nu) - sin(Omega)*cos(I)*sin(w+nu));
|
---|
17 | ry = r * (sin(Omega)*cos(w+nu) + cos(Omega)*cos(I)*sin(w+nu));
|
---|
18 | rz = r * sin(I) * sin(w+nu);
|
---|
19 |
|
---|
20 | v = sqrt( mu_sun * (2/r - 1/a) );
|
---|
21 |
|
---|
22 | % vx = -sqrt(mu_sun/p) * (cos(Omega)*(sin(w+nu)+ecc*sin(w))-sin(Omega)*cos(I)*(cos(w+nu)+ecc*cos(w)));
|
---|
23 | % vy = -sqrt(mu_sun/p) * (sin(Omega)*(sin(w+nu)+ecc*sin(w))-cos(Omega)*cos(I)*(cos(w+nu)+ecc*cos(w)));
|
---|
24 | % vz = sqrt(mu_sun/p) * sin(I)*(cos(w+nu)+ecc*cos(w));
|
---|
25 |
|
---|
26 | if (I > 0)
|
---|
27 | A = [ sin(I)*sin(Omega) -sin(I)*cos(Omega) ; rx ry ];
|
---|
28 | B = [ -cos(I) ; -rz ];
|
---|
29 | rez = inv(A) * B;
|
---|
30 | a = rez(1);
|
---|
31 | b = rez(2);
|
---|
32 |
|
---|
33 | vz = v / sqrt(1 + a*a + b*b);
|
---|
34 | vx = a * vz;
|
---|
35 | vy = b * vz;
|
---|
36 | else
|
---|
37 | vx = v / sqrt(1+(rx*rx)/(ry*ry));
|
---|
38 | vy = - rx/ry * vx;
|
---|
39 | vz = 0;
|
---|
40 | end
|
---|
41 |
|
---|
42 | R = [rx ry rz];
|
---|
43 | V = [vx vy vz];
|
---|
44 |
|
---|
45 | end
|
---|
46 | |
---|
Note: See
TracBrowser
for help on using the repository browser.