Compare commits

..

No commits in common. "dac96cf1ac47d03e0cc21662fb328d35a7e9e8fa" and "817a446fad0c7b04c9a43c5bafd09ba2a3e68483" have entirely different histories.

View file

@ -5,7 +5,7 @@ use std::{collections::BTreeSet, sync::atomic::{AtomicU64, Ordering}};
use sycamore::prelude::*; use sycamore::prelude::*;
use web_sys::{console, wasm_bindgen::JsValue}; /* DEBUG */ use web_sys::{console, wasm_bindgen::JsValue}; /* DEBUG */
use crate::engine::{realize_gram, local_unif_to_std, ConfigSubspace, PartialMatrix}; use crate::engine::{realize_gram, local_unif_to_std, ConfigSubspace, PartialMatrix, Q};
// the types of the keys we use to access an assembly's elements and constraints // the types of the keys we use to access an assembly's elements and constraints
pub type ElementKey = usize; pub type ElementKey = usize;
@ -371,8 +371,8 @@ impl Assembly {
} }
} }
// step the assembly along the deformation. this changes the elements' // step each element along the mass shell geodesic that matches its
// normalizations, so we restore those afterward // velocity in the deformation found above
/* KLUDGE */ /* KLUDGE */
// since our test assemblies only include spheres, we assume that every // since our test assemblies only include spheres, we assume that every
// element is on the 1 mass shell // element is on the 1 mass shell
@ -380,16 +380,9 @@ impl Assembly {
elt.representation.update_silent(|rep| { elt.representation.update_silent(|rep| {
match elt.column_index { match elt.column_index {
Some(column_index) => { Some(column_index) => {
// step the assembly along the deformation let rep_next = &*rep + motion_proj.column(column_index);
*rep += motion_proj.column(column_index); let normalizer = rep_next.dot(&(&*Q * &rep_next));
rep.set_column(0, &(rep_next / normalizer));
// restore normalization by contracting toward the last
// coordinate axis
let q_sp = rep.fixed_rows::<3>(0).norm_squared();
let half_q_lt = -2.0 * rep[3] * rep[4];
let half_q_lt_sq = half_q_lt * half_q_lt;
let scaling = half_q_lt + (q_sp + half_q_lt_sq).sqrt();
rep.fixed_rows_mut::<4>(0).scale_mut(1.0 / scaling);
}, },
None => { None => {
console::log_1(&JsValue::from( console::log_1(&JsValue::from(