~starkingdoms/starkingdoms

b17014e6d6f8252c48e737358e5f303b673e922f — core 2 years ago 3feb66b
working on vis_viva
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 {