From 1614ece72afac240313d72b9c3bf8fbcb8ea5c6f Mon Sep 17 00:00:00 2001 From: yuni Date: Sat, 8 Jun 2024 03:25:07 +0200 Subject: [PATCH] update the 2 new nature functions using DVec3 instead of Vec3 --- src/nature.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/nature.rs b/src/nature.rs index 360059e..17b8ae2 100644 --- a/src/nature.rs +++ b/src/nature.rs @@ -11,7 +11,6 @@ // This module manages the messy, impure parts of our universe. use crate::prelude::*; -use bevy::prelude::Vec3; pub const OXYGEN_USE_KG_PER_S: f32 = 1e-5; pub const OXY_S: f32 = OXYGEN_USE_KG_PER_S; @@ -172,30 +171,30 @@ pub fn simple_orbital_period(mass: f64, distance: f64) -> f64 { } /// Calculates the orbital velocity with given parameters, assuming prograde circular orbit. -pub fn orbital_velocity(coords: Vec3, mass: f64) -> Vec3 { - let r = coords.length() as f64; - let speed = (G * mass / r).sqrt() as f32; +pub fn orbital_velocity(coords: DVec3, mass: f64) -> DVec3 { + let r = coords.length(); + let speed = (G * mass / r).sqrt(); // This generates a perpendicular orbital vector in the prograde direction - let perpendicular = Vec3::new(-coords.z, 0.0, -coords.x).normalize(); + let perpendicular = DVec3::new(-coords.z, 0.0, -coords.x).normalize(); return perpendicular * speed; } /// Calculates the acceleration towards a mass in m/s -pub fn gravitational_acceleration(coords: Vec3, mass: f64) -> Vec3 { - let r_squared = coords.length_squared() as f64; +pub fn gravitational_acceleration(coords: DVec3, mass: f64) -> DVec3 { + let r_squared = coords.length_squared(); let acceleration_magnitude = G * mass / r_squared; - return -acceleration_magnitude as f32 * (coords / r_squared.sqrt() as f32); + return -acceleration_magnitude * (coords / r_squared.sqrt()); } #[test] fn test_gravitational_acceleration() { - let coords = Vec3::new(EARTH_RADIUS as f32, 0.0, 0.0); + let coords = DVec3::new(EARTH_RADIUS, 0.0, 0.0); let mass = EARTH_MASS; let g = gravitational_acceleration(coords, mass); let g_rounded = (g * 10.0).round() / 10.0; - assert_eq!(g_rounded, Vec3::new(-9.8, 0.0, 0.0)); + assert_eq!(g_rounded, DVec3::new(-9.8, 0.0, 0.0)); } pub fn phase_dist_to_coords(phase_radians: f64, distance: f64) -> DVec3 {