Split into modules

This commit is contained in:
numzero 2024-04-28 23:11:34 +03:00
parent 4c29c8de0b
commit 10563d8d56

View File

@ -2,6 +2,7 @@ use flo_draw::*;
use flo_canvas::*;
use glm::*;
use num_traits::identities::Zero;
use riemann::{Decomp2, Metric, trace_iter};
pub fn main() {
let space = Coil {
@ -75,14 +76,18 @@ impl Metric for Coil {
}
}
struct Decomp2 {
ortho: Mat2,
diag: Vec2,
mod riemann {
use glm::*;
use num_traits::identities::Zero;
pub struct Decomp2 {
pub ortho: Mat2,
pub diag: Vec2,
}
type Tens2 = [Mat2; 2];
trait Metric {
pub trait Metric {
fn halfmetric(&self, pos: Vec2) -> Decomp2;
fn metric(&self, pos: Vec2) -> Mat2 {
@ -107,7 +112,7 @@ trait Metric {
}
}
struct TraceIter<'a, M: Metric> {
pub struct TraceIter<'a, M: Metric> {
space: &'a M,
p: Vec2,
v: Vec2,
@ -129,7 +134,7 @@ fn trace(space: &impl Metric, base: Vec2, dir: Vec2, distance: f32, dt: f32) ->
trace_iter(space, base, dir, dt).take((distance / dt) as usize).collect()
}
fn trace_iter<M: Metric>(space: &M, base: Vec2, dir: Vec2, dt: f32) -> TraceIter<M> {
pub fn trace_iter<M: Metric>(space: &M, base: Vec2, dir: Vec2, dt: f32) -> TraceIter<M> {
TraceIter {
space: space,
p: base,
@ -138,6 +143,12 @@ fn trace_iter<M: Metric>(space: &M, base: Vec2, dir: Vec2, dt: f32) -> TraceIter
}
}
#[cfg(test)]
mod test {
use glm::*;
use crate::riemann::{trace, trace_iter};
use crate::Coil;
#[test]
fn t_iter() {
let space = Coil {
@ -154,6 +165,7 @@ fn t_iter() {
let b: Vec<Vec2> = trace_iter(&space, base, dir, dt).take(steps).collect();
assert_eq!(a, b);
}
}
fn krist(space: &impl Metric, pos: Vec2) -> Tens2 {
// Γ^i_k_l = .5 * g^i^m * (g_m_k,l + g_m_l,k - g_k_l,m)
@ -196,6 +208,7 @@ fn convolute(G: Tens2, v: Vec2) -> Vec2 {
fn diagonal(v: Vec2) -> Mat2 {
mat2(v.x, 0.0, 0.0, v.y)
}
}
fn sqr(x: f32) -> f32 {
return x * x;