jupiters 0.0.1

Jupiter celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum CloudBiome {
    UpperHaze,
    AmmoniaIceCloud,
    NH4SHCloud,
    WaterIceCloud,
    DeepCloud,
    ClearZone,
    StormRegion,
    PolarVortex,
}

pub struct SplatWeights {
    pub weights: [(CloudBiome, f32); 4],
}

pub struct CloudBiomeClassifier {
    pub onebarlevel: f64,
}

impl Default for CloudBiomeClassifier {
    fn default() -> Self {
        Self { onebarlevel: 0.0 }
    }
}

impl CloudBiomeClassifier {
    pub fn classify(&self, altitudem: f64, latitudedeg: f64, windspeedms: f64) -> CloudBiome {
        let abslat = latitudedeg.abs();
        if abslat > 75.0 {
            return CloudBiome::PolarVortex;
        }
        if windspeedms > 150.0 {
            return CloudBiome::StormRegion;
        }
        if altitudem > self.onebarlevel + 50000.0 {
            return CloudBiome::UpperHaze;
        }
        if altitudem > self.onebarlevel + 30000.0 {
            return CloudBiome::AmmoniaIceCloud;
        }
        if altitudem > self.onebarlevel + 10000.0 {
            return CloudBiome::NH4SHCloud;
        }
        if altitudem > self.onebarlevel - 20000.0 {
            return CloudBiome::WaterIceCloud;
        }
        if altitudem > self.onebarlevel - 80000.0 {
            return CloudBiome::DeepCloud;
        }
        CloudBiome::ClearZone
    }

    pub fn splat(&self, altitudem: f64, latitudedeg: f64, windspeedms: f64) -> SplatWeights {
        let primary = self.classify(altitudem, latitudedeg, windspeedms);
        SplatWeights {
            weights: [
                (primary, 1.0),
                (CloudBiome::ClearZone, 0.0),
                (CloudBiome::ClearZone, 0.0),
                (CloudBiome::ClearZone, 0.0),
            ],
        }
    }
}