use nalgebra::DVector; // the sphere with the given center and radius, with inward-pointing normals pub fn sphere(center_x: f64, center_y: f64, center_z: f64, radius: f64) -> DVector { let center_norm_sq = center_x * center_x + center_y * center_y + center_z * center_z; DVector::from_column_slice(&[ center_x / radius, center_y / radius, center_z / radius, 0.5 / radius, 0.5 * (center_norm_sq / radius - radius) ]) } // the sphere of curvature `curv` whose closest point to the origin has position // `off * dir` and normal `dir`, where `dir` is a unit vector. setting the // curvature to zero gives a plane pub fn sphere_with_offset(dir_x: f64, dir_y: f64, dir_z: f64, off: f64, curv: f64) -> DVector { let norm_sp = 1.0 + off * curv; DVector::from_column_slice(&[ norm_sp * dir_x, norm_sp * dir_y, norm_sp * dir_z, 0.5 * curv, off * (1.0 + 0.5 * off * curv) ]) }