M server/src/orbit/mod.rs => server/src/orbit/mod.rs +2 -1
@@ 1,4 1,5 @@
pub mod constants;
pub mod orbit;
pub mod newtonian;
-pub mod kepler;>
\ No newline at end of file
+pub mod kepler;
+pub mod vis_viva;<
\ No newline at end of file
M server/src/orbit/orbit.rs => server/src/orbit/orbit.rs +19 -0
@@ 3,6 3,25 @@
use nalgebra::{vector, Vector2};
use crate::orbit::newtonian::solve_kepler_with_newtonian;
+use crate::orbit::vis_viva::vis_viva;
+use crate::planet::GRAVITY;
+
+pub fn calculate_vector_of_orbit(periapsis: f64, apoapsis: f64, t: f64, mass_of_bigger: f64) -> Vector2<f64> {
+ let semi_major_length = (apoapsis + periapsis) / 2.0;
+ let linear_eccentricity = semi_major_length - periapsis; // distance between center and focus
+ let eccentricity = linear_eccentricity / semi_major_length; // 0: circle. 1: parabola. in between: ellipse
+
+ let distances = calculate_point_on_orbit(periapsis, apoapsis, t);
+ let distance_x = distances[0];
+ let distance_y = distances[1];
+
+ let distance = (distance_x * distance_x + distance_y * distance_y).sqrt();
+
+ let velocity = vis_viva(distance, semi_major_length, GRAVITY, mass_of_bigger);
+
+ let ellipse_center_x = -linear_eccentricity;
+ let ellipse_center_y = apoapsis - semi_major_length;
+}
pub fn calculate_point_on_orbit(periapsis: f64, apoapsis: f64, t: f64) -> Vector2<f64> {
let semi_major_length = (apoapsis + periapsis) / 2.0;
A server/src/orbit/vis_viva.rs => server/src/orbit/vis_viva.rs +3 -0
@@ 0,0 1,3 @@
+pub fn vis_viva(distance_between_centers: f64, semi_major: f64, g: f64, mass_of_bigger: f64) -> f64 {
+ (g * mass_of_bigger * (2.0 / distance_between_centers - 1.0 / semi_major)).sqrt()
+}<
\ No newline at end of file
M server/src/planet.rs => server/src/planet.rs +1 -1
@@ 8,7 8,7 @@ use crate::orbit::constants::{EARTH_MASS, EARTH_RADIUS, MOON_APOAPSIS, MOON_MASS
use crate::orbit::orbit::{calculate_point_on_orbit, calculate_world_position_of_orbit};
//const GRAVITY: f64 = 0.001;
-const GRAVITY: f64 = 12.6674;
+pub const GRAVITY: f64 = 12.6674;
#[derive(Clone)]
pub struct Planet {