refactor: extract retrieving cartesian elements
This commit is contained in:
		
							parent
							
								
									ad281f5b68
								
							
						
					
					
						commit
						d96515f8ac
					
				| @ -45,11 +45,8 @@ void Orbit::setElements(Vector6 keplerianElements) | ||||
|     regenerateVertices(); | ||||
| } | ||||
| 
 | ||||
| // Interpolate a position around the orbit.
 | ||||
| // t is in range 0..1 and wraps.
 | ||||
| glm::vec3 Orbit::getPosition(const float meanAnomaly) | ||||
| float Orbit::getEccentricAnomaly(const float meanAnomaly) | ||||
| { | ||||
|     // Get eccentric anomaly from elliptical mean anomaly
 | ||||
|     const float eccentricity = _keplerianElements[astro::eccentricityIndex]; | ||||
|     float eccentricAnomaly = astro::convertEllipticalMeanAnomalyToEccentricAnomaly( | ||||
|         eccentricity, | ||||
| @ -57,21 +54,36 @@ glm::vec3 Orbit::getPosition(const float meanAnomaly) | ||||
|         (float)10e-3, | ||||
|         100); | ||||
| 
 | ||||
|     // Get true anomaly from eccentric anomaly
 | ||||
|     float trueAnomaly = astro::convertEccentricAnomalyToTrueAnomaly( | ||||
|         eccentricAnomaly, | ||||
|         eccentricity); | ||||
|     return eccentricAnomaly; | ||||
| } | ||||
| 
 | ||||
|     std::vector<float> kepler(_keplerianElements); | ||||
|     kepler[astro::trueAnomalyIndex] = trueAnomaly; | ||||
| 
 | ||||
|     std::vector<float> cartesian = astro::convertKeplerianToCartesianElements(kepler, 1.0); | ||||
| // Interpolate a position around the orbit.
 | ||||
| // t is in range 0..1 and wraps.
 | ||||
| glm::vec3 Orbit::getPosition(const float meanAnomaly) | ||||
| { | ||||
|     Vector6 cartesian = getCartesianCoordinates(meanAnomaly); | ||||
|     return glm::vec3( | ||||
|         cartesian[astro::xPositionIndex], | ||||
|         cartesian[astro::yPositionIndex], | ||||
|         cartesian[astro::zPositionIndex]); | ||||
| } | ||||
| 
 | ||||
| float Orbit::getTrueAnomaly(const float meanAnomaly) | ||||
| { | ||||
|     const float eccentricAnomaly = getEccentricAnomaly(meanAnomaly); | ||||
|     const float eccentricity = _keplerianElements[astro::eccentricityIndex]; | ||||
|     return astro::convertEccentricAnomalyToTrueAnomaly( | ||||
|         eccentricAnomaly, | ||||
|         eccentricity); | ||||
| } | ||||
| 
 | ||||
| Vector6 Orbit::getCartesianCoordinates(const float meanAnomaly) | ||||
| { | ||||
|     Vector6 kepler(_keplerianElements); | ||||
|     kepler[astro::trueAnomalyIndex] = getTrueAnomaly(meanAnomaly); | ||||
|     return astro::convertKeplerianToCartesianElements(kepler, 1.0); | ||||
| } | ||||
| 
 | ||||
| glm::vec3 Orbit::getTangent(const float meanAnomaly) | ||||
| { | ||||
|     float epsilon = 0.01; | ||||
|  | ||||
| @ -13,8 +13,9 @@ public: | ||||
|     Orbit(Vector6 keplerianElements); | ||||
|     void render(); | ||||
| 
 | ||||
|     // TODO: meanAnomaly in all these arguments actually means eccentricMeanAnomaly,
 | ||||
|     // will have to change that when adding non-ellipctical orbits - don't get confused!
 | ||||
|     glm::vec3 getPosition(const float meanAnomaly); | ||||
|     glm::vec3 getVelocity(const float meanAnomaly); | ||||
|     glm::vec3 getTangent(const float meanAnomaly); | ||||
| 
 | ||||
|     void setElements(Vector6 keplerianElements); | ||||
| @ -31,4 +32,8 @@ private: | ||||
|     Vector6 _keplerianElements; | ||||
| 
 | ||||
|     void regenerateVertices(); | ||||
| 
 | ||||
|     float getEccentricAnomaly(const float meanAnomaly); | ||||
|     float getTrueAnomaly(const float meanAnomaly); | ||||
|     Vector6 getCartesianCoordinates(const float meanAnomaly); | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user