40 std::unique_ptr<WsfNORAD_OrbitalPropagator> aPropPtr);
46 ut::OrbitalState GetOrbitalState()
const;
49 UtTwoLineElement GetTwoLineElement()
const;
56 StateVector(
const ut::OrbitalState::Vector& aVector);
57 explicit StateVector(
const UtMatrixd& aMatrix);
58 StateVector() =
default;
60 UtVec3d Position()
const;
61 UtVec3d Velocity()
const;
63 StateVector operator-(
const StateVector& aOther)
const;
64 StateVector operator*(
double aScalar)
const;
66 double Component(
int aIndex)
const {
return mVec(aIndex); }
68 const UtMatrixd& Vector()
const {
return mVec; }
70 static const int cDIMENSION = 6;
80 explicit SearchVector(
const UtTwoLineElement& aElements);
81 explicit SearchVector(
const UtMatrixd& aMatrix);
82 explicit SearchVector(
double aFillValue);
84 UtTwoLineElement GetTLE(
const UtCalendar& aEpoch,
const UtTwoLineElement& aReferenceTLE)
const;
86 SearchVector& operator+=(
const SearchVector& aOther);
87 SearchVector& operator-=(
const SearchVector& aOther);
88 SearchVector operator+(
const SearchVector& aOther)
const;
89 SearchVector operator*(
double aScalar)
const;
91 double Component(
int aIndex)
const;
93 static SearchVector UnitVector(
int aIndex,
double aValue = 1.0);
95 static const int cDIMENSION = 6;
103 template<
typename Q,
typename X>
107 static_assert(Q::cDIMENSION == X::cDIMENSION,
"Search and State space must have the same dimension");
110 : mMat(Q::cDIMENSION, Q::cDIMENSION)
114 void SetColumn(
int aIndex,
const X& aStateColumn)
116 for (
int i = 0; i < cDIMENSION; ++i)
118 mMat(i, aIndex) = aStateColumn.Component(i);
122 Q InverseProduct(
const X& aState)
const
128 retval.Multiply(Jinv, aState.Vector());
133 static const int cDIMENSION = Q::cDIMENSION;
139 using FullStateSolver = ut::NewtonRaphson<SearchVector, StateVector, Jacobian<SearchVector, StateVector>>;
141 StateVector Propagate(
const SearchVector& aElems)
const;
142 SearchVector InitialOsculatingElements(
const StateVector& aState)
const;
144 std::unique_ptr<WsfNORAD_OrbitalPropagator> mPropPtr;
146 UtECI_Conversion mECI_TEME_Converter;
147 StateVector mTargetStateTEME;
148 SearchVector mSearchSolution;
150 UtTwoLineElement mReferenceTLE;