omni_randomwalk/
random_cordinates.rs

1use rand::Rng;
2
3pub fn random_cordinates_two_dim(steps: u64) -> Vec<[f64; 2]> {
4    let mut ran = rand::thread_rng();
5
6    let x_walk: Vec<u64> = (0..steps).map(|_| ran.gen_range(0..=1)).collect();
7    let y_walk: Vec<u64> = (0..steps).map(|_| ran.gen_range(0..=1)).collect();
8
9    let walk: &mut Vec<[f64; 2]> = &mut vec![[0.0, 0.0]];
10
11    for i in 0..steps as usize {
12        let x: u64 = x_walk[i];
13        let y: u64 = y_walk[i];
14
15        let step_before_x = walk[i][0];
16        let step_before_y = walk[i][1];
17
18        let new_step_x = step_before_x + bool_as_number(x);
19        let new_step_y = step_before_y + bool_as_number(y);
20
21        let new_step = [new_step_x, new_step_y];
22        walk.push(new_step)
23    }
24
25    walk.clone()
26}
27
28fn bool_as_number(value: u64) -> f64 {
29    if value == 1 {
30        1.0
31    } else {
32        -1.0
33    }
34}
35
36pub fn random_cordinates_one_dim(steps: u64) -> Vec<[f64; 2]> {
37    let mut ran = rand::thread_rng();
38
39    let x_walk: Vec<u64> = (0..steps).map(|_| ran.gen_range(0..=1)).collect();
40
41    let walk: &mut Vec<[f64; 2]> = &mut vec![[0.0, 0.0]];
42
43    for i in 0..steps as usize {
44        let x: u64 = x_walk[i];
45
46        let step_before_x = walk[i][0];
47
48        let new_step_x = step_before_x + bool_as_number(x);
49
50        let new_step = [new_step_x, 0.0];
51        walk.push(new_step)
52    }
53
54    walk.clone()
55}