sciforge-lib 0.0.4

Scientific computing library — mathematics, physics, chemistry, biology, astronomy, geology, meteorology.
Documentation
#[derive(Debug, Clone, Copy)]
pub struct Restitution {
    pub material_a: &'static str,
    pub material_b: &'static str,
    pub coefficient: f64,
    pub condition: &'static str,
}

pub const TABLE: &[Restitution] = &[
    Restitution { material_a: "steel",    material_b: "steel",    coefficient: 0.78, condition: "ball_drop" },
    Restitution { material_a: "steel",    material_b: "Al",       coefficient: 0.60, condition: "ball_drop" },
    Restitution { material_a: "Al",       material_b: "Al",       coefficient: 0.55, condition: "ball_drop" },
    Restitution { material_a: "glass",    material_b: "glass",    coefficient: 0.95, condition: "ball_drop" },
    Restitution { material_a: "ivory",    material_b: "ivory",    coefficient: 0.89, condition: "billiard" },
    Restitution { material_a: "rubber",   material_b: "concrete", coefficient: 0.65, condition: "ball_drop" },
    Restitution { material_a: "rubber",   material_b: "steel",    coefficient: 0.85, condition: "ball_drop" },
    Restitution { material_a: "wood",     material_b: "wood",     coefficient: 0.50, condition: "ball_drop" },
    Restitution { material_a: "tennis",   material_b: "concrete", coefficient: 0.73, condition: "official" },
    Restitution { material_a: "basket",   material_b: "wood",     coefficient: 0.76, condition: "official" },
    Restitution { material_a: "golf",     material_b: "steel",    coefficient: 0.78, condition: "club_face" },
    Restitution { material_a: "baseball", material_b: "wood_bat", coefficient: 0.55, condition: "official" },
    Restitution { material_a: "lead",     material_b: "lead",     coefficient: 0.20, condition: "ball_drop" },
    Restitution { material_a: "clay",     material_b: "steel",    coefficient: 0.10, condition: "ball_drop" },
    Restitution { material_a: "ice",      material_b: "ice",      coefficient: 0.10, condition: "puck" },
];

pub fn by_pair(material_a: &str, material_b: &str) -> Option<&'static Restitution> {
    TABLE.iter().find(|r| {
        (r.material_a == material_a && r.material_b == material_b)
            || (r.material_a == material_b && r.material_b == material_a)
    })
}