commit 620bd8be51265af8c8854fc51827b4e661ba4d97 Author: Daniel Svitan Date: Fri Apr 18 22:15:04 2025 +0200 :tada: Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..ac63fec --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,63 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "free-fall-sim" +version = "0.1.0" +dependencies = [ + "physical_constants", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "physical_constants" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3aad4556f19b1f2430b7d8492f251a8d152636595bcbf3224d099eead0e4c73" +dependencies = [ + "regex", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a4a9713 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "free-fall-sim" +version = "0.1.0" +edition = "2024" + +[dependencies] +physical_constants = "0.5.0" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..7a4e8c5 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,38 @@ +#![allow(non_snake_case)] + +use physical_constants; +use std::{thread, time}; + +fn main() { + let f = 100_f64; // Hz + let time_delta = 1_f64 / f; // s + let speed_dial = 1_f64; + let pause = time::Duration::from_millis((time_delta * 1000_f64 / speed_dial) as u64); + + let mass = 1_f64; // kg + //let A = 0.0025_f64; // m^2 + let A = 1_f64; // m^2 + let Cd = 0.5_f64; + let p = 1.204_f64; // kg/m^3 + + let Fg = mass * physical_constants::STANDARD_ACCELERATION_OF_GRAVITY; // N + let mut Fd = 0_f64; + + let mut a; // m/s^2 + let mut v = 0_f64; // m/s + let mut d = 0_f64; // m + let mut elapsed = 0_f64; + + loop { + a = (Fg - Fd) / mass; + v += a * time_delta; + d += v * time_delta; + + print!("t = {:.3} s Fg = {:.3} N Fd = {:.3} N a = {:.3} m/s^2 v = {:.3} m/s d = {:.3} m\r", elapsed, Fg, Fd, a, v, d); + + Fd = p * Cd * A * v.powf(2_f64) / 2_f64; + elapsed += time_delta; + + thread::sleep(pause); + } +}