#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OberonZone {
CrateredHighlands,
ChascataFloor,
SmoothPlains,
PolarFrost,
ImpactBasin,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct SurfaceZone {
pub zone: OberonZone,
pub mean_albedo: f64,
pub regolith_depth_m: f64,
}
pub fn zone_from_lat_lon(latitude_deg: f64, longitude_deg: f64) -> SurfaceZone {
if latitude_deg.abs() > 60.0 {
SurfaceZone {
zone: OberonZone::PolarFrost,
mean_albedo: 0.30,
regolith_depth_m: 5.0,
}
} else if (-20.0..=0.0).contains(&latitude_deg) && (220.0..=260.0).contains(&longitude_deg) {
SurfaceZone {
zone: OberonZone::ChascataFloor,
mean_albedo: 0.25,
regolith_depth_m: 8.0,
}
} else if (10.0..=30.0).contains(&latitude_deg) && (90.0..=130.0).contains(&longitude_deg) {
SurfaceZone {
zone: OberonZone::ImpactBasin,
mean_albedo: 0.22,
regolith_depth_m: 15.0,
}
} else if longitude_deg > 150.0 {
SurfaceZone {
zone: OberonZone::SmoothPlains,
mean_albedo: 0.24,
regolith_depth_m: 10.0,
}
} else {
SurfaceZone {
zone: OberonZone::CrateredHighlands,
mean_albedo: 0.23,
regolith_depth_m: 12.0,
}
}
}