#[path = "common/print.rs"] mod print; use nalgebra::{DMatrix, DVector}; use dyna3::engine::{ConfigNeighborhood, examples::realize_kaleidocycle}; fn main() { const SCALED_TOL: f64 = 1.0e-12; let realization = realize_kaleidocycle(SCALED_TOL); print::title("Kaleidocycle"); print::realization_diagnostics(&realization); if let Ok(ConfigNeighborhood { config, nbhd: tangent }) = realization.result { // print the completed Gram matrix and the realized configuration print::gram_matrix(&config); print::config(&config); // find the kaleidocycle's twist motion by projecting onto the tangent // space const N_POINTS: usize = 12; let up = DVector::from_column_slice(&[0.0, 0.0, 1.0, 0.0]); let down = -&up; let twist_motion: DMatrix<_> = (0..N_POINTS).step_by(4).flat_map( |n| [ tangent.proj(&up.as_view(), n), tangent.proj(&down.as_view(), n+1) ] ).sum(); let normalization = 5.0 / twist_motion[(2, 0)]; println!("\nTwist motion:{}", (normalization * twist_motion).to_string().trim_end()); } }