Split into modules
This commit is contained in:
parent
4c29c8de0b
commit
10563d8d56
|
|
@ -2,6 +2,7 @@ use flo_draw::*;
|
||||||
use flo_canvas::*;
|
use flo_canvas::*;
|
||||||
use glm::*;
|
use glm::*;
|
||||||
use num_traits::identities::Zero;
|
use num_traits::identities::Zero;
|
||||||
|
use riemann::{Decomp2, Metric, trace_iter};
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let space = Coil {
|
let space = Coil {
|
||||||
|
|
@ -75,14 +76,18 @@ impl Metric for Coil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Decomp2 {
|
mod riemann {
|
||||||
ortho: Mat2,
|
use glm::*;
|
||||||
diag: Vec2,
|
use num_traits::identities::Zero;
|
||||||
|
|
||||||
|
pub struct Decomp2 {
|
||||||
|
pub ortho: Mat2,
|
||||||
|
pub diag: Vec2,
|
||||||
}
|
}
|
||||||
|
|
||||||
type Tens2 = [Mat2; 2];
|
type Tens2 = [Mat2; 2];
|
||||||
|
|
||||||
trait Metric {
|
pub trait Metric {
|
||||||
fn halfmetric(&self, pos: Vec2) -> Decomp2;
|
fn halfmetric(&self, pos: Vec2) -> Decomp2;
|
||||||
|
|
||||||
fn metric(&self, pos: Vec2) -> Mat2 {
|
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,
|
space: &'a M,
|
||||||
p: Vec2,
|
p: Vec2,
|
||||||
v: 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()
|
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 {
|
TraceIter {
|
||||||
space: space,
|
space: space,
|
||||||
p: base,
|
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]
|
#[test]
|
||||||
fn t_iter() {
|
fn t_iter() {
|
||||||
let space = Coil {
|
let space = Coil {
|
||||||
|
|
@ -154,6 +165,7 @@ fn t_iter() {
|
||||||
let b: Vec<Vec2> = trace_iter(&space, base, dir, dt).take(steps).collect();
|
let b: Vec<Vec2> = trace_iter(&space, base, dir, dt).take(steps).collect();
|
||||||
assert_eq!(a, b);
|
assert_eq!(a, b);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn krist(space: &impl Metric, pos: Vec2) -> Tens2 {
|
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)
|
// Γ^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 {
|
fn diagonal(v: Vec2) -> Mat2 {
|
||||||
mat2(v.x, 0.0, 0.0, v.y)
|
mat2(v.x, 0.0, 0.0, v.y)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn sqr(x: f32) -> f32 {
|
fn sqr(x: f32) -> f32 {
|
||||||
return x * x;
|
return x * x;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user