Implemented some functions from the original. Incomplete.

This commit is contained in:
Alex Huddleston 2017-11-04 23:25:04 -05:00
parent e84415687f
commit 41eb4a721f
2 changed files with 69 additions and 0 deletions

View file

@ -9,3 +9,4 @@ license = "MIT"
[dependencies]
obj = "0.8"
noise = "0.4"
cgmath = "0.15.0"

View file

@ -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<f64> {
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>) -> 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<SimplePolygon>) -> (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");