pub trait AtomTrait {
fn get_position(&self) -> [f64; 3];
fn set_position(&mut self, pos: [f64; 3]);
fn atomic_number(&self) -> usize;
fn formal_charge(&self) -> i32 {
0
}
}
pub trait BondTrait {
fn get_atom_indices(&self) -> (usize, usize);
fn get_bond_order(&self) -> f32;
}
pub fn get_valence_electrons(atomic_number: usize) -> usize {
match atomic_number {
1 => 1, 2 => 2, 3..=10 => { let v = atomic_number - 2;
if v > 8 { 8 } else { v }
}
11..=18 => { let v = atomic_number - 10;
if v > 8 { 8 } else { v }
}
19..=36 => { let v = atomic_number - 18;
if v > 8 { 8 } else { v }
}
_ => 8, }
}
pub fn get_covalent_radius(atomic_number: usize) -> f64 {
match atomic_number {
1 => 31.0, 2 => 28.0, 3 => 128.0, 4 => 96.0, 5 => 84.0, 6 => 76.0, 7 => 71.0, 8 => 66.0, 9 => 57.0, 14 => 111.0, 15 => 107.0, 16 => 105.0, 17 => 102.0, 35 => 120.0, 50 => 140.0, 53 => 139.0, 82 => 146.0, _ => 150.0, }
}