barnsley 0.1.0

iterated function system image generator
Documentation
use serde::{Serialize, Deserialize};
use crate::transform::*;
use crate::ifs::*;
use crate::image::Image;

#[derive(Serialize, Deserialize)]
pub struct Config {
   pub image_settings: ImageSettings,
   pub evaluation_settings: EvaluationSettings,
   pub transforms: Vec<TransformEnum>,
}

impl Config {
   pub fn run(&self) {
      let mut ifs = IFS::new();
      for tranform in self.transforms.iter() {
         ifs.add_transform(*tranform);
      }

    let num_points = self.evaluation_settings.num_points as usize;
    let num_iterations = self.evaluation_settings.num_iterations as usize;

    let mut image = Image::new(self.image_settings.width as usize, self.image_settings.height as usize);
    ifs.evaluate(&mut image, num_points, num_iterations);
    image.save(&self.image_settings.path, 1.max((num_points * num_iterations) / (image.height() * image.width())));
   }
}

#[derive(Serialize, Deserialize, Clone)]
pub struct ImageSettings {
   pub width: u32,
   pub height: u32,
   pub path: String
}

#[derive(Serialize, Deserialize, Copy, Clone)]
pub struct EvaluationSettings {
   pub num_iterations: u32,
   pub num_points: u32,
}