forked from StudioInfinity/dyna3
32 lines
No EOL
1.1 KiB
Rust
32 lines
No EOL
1.1 KiB
Rust
#[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());
|
|
}
|
|
} |