diff --git a/Cargo.toml b/Cargo.toml index 223f4de..a2de496 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,4 @@ license = "MIT" [dependencies] obj = "0.8" noise = "0.4" +cgmath = "0.15.0" diff --git a/src/main.rs b/src/main.rs index ac6ddea..4bdeafd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,18 @@ +// REralCity +// Alex Huddleston / Jeremy Martin + extern crate obj; extern crate noise; +extern crate cgmath; use std::io::Result; use std::path::Path; use obj::{Obj, SimplePolygon}; +//use std::f64::consts::PI; +use noise::Fbm; +use noise::Seedable; +use noise::MultiFractal; +use noise::NoiseModule; // A function called test that takes in 1 32-bit integer // and returns a 32-bit integer. @@ -27,6 +36,65 @@ fn test(x: i32) -> i32 { } */ +fn distance_a_to_b(ax: f64, ay: f64, bx: f64, by: f64) -> f64 { + ((bx - ax)*(bx - ax) + (by - ay)*(by - ay)).sqrt() +} + +fn noise_map(seed: usize, oct: usize, freq: f64, lacu: f64, pers: f64) -> Fbm { + Fbm::new() + .set_seed(seed) + .set_octaves(oct) + .set_frequency(freq) + .set_lacunarity(lacu) + .set_persistence(pers) +} + +fn return_at(x: f64, y: f64, fbmnoise: &Fbm) -> f64 { + let n = 20.0 * fbmnoise.get([x, y]); + let n = n - n.floor(); + + let m = distance_a_to_b(x, y, 0.5, 0.5); + + return (m*0.15) + (n*0.85); +} + +fn find_l_w(obj: &Obj) -> (f32, f32) { + if let Some(first) = obj.position.first() { + let initial = ( + first[0], + first[1], + first[0], + first[1] + ); + + let min_maxes = obj.position.iter().fold(initial, |acc, point| { + let acc = if acc.0 > point[0] { + (point[0], acc.1, acc.2, acc.3) + } else if acc.2 < point[0] { + (acc.0, acc.1, point[0], acc.3) + } else { + acc + }; + + if acc.1 > point[1] { + (acc.0, point[1], acc.2, acc.3) + } else if acc.3 < point[1] { + (acc.0, acc.1, acc.2, point[1]) + } else { + acc + } + }); + + (min_maxes.2 - min_maxes.0, min_maxes.3 - min_maxes.1) + } else { + (0.0, 0.0) + } +} + +fn generate_city(positions: Vec<[f32; 3]>, layers: i32, spacing: f32, length: f32, width: f32) -> Vec<[f32; 3]> { + positions +} + fn main() { let path = Path::new("data/teapot.obj");