49 lines
1.4 KiB
Rust
49 lines
1.4 KiB
Rust
use rand::rngs::SmallRng;
|
|
use rand::{Rng, SeedableRng};
|
|
use crate::system::model::DLASystem;
|
|
use crate::system::{Storage};
|
|
use crate::system::spaces::square_grid::Grid2D;
|
|
use crate::system::spaces::VectorStorage;
|
|
use crate::system::spawner::UniformSpawner;
|
|
use crate::system::sticker::{ProbabilisticSticking, SimpleSticking, Sticker};
|
|
use crate::system::walker::LocalRandomWalker;
|
|
|
|
struct LoggerSticker {
|
|
inner: SimpleSticking
|
|
}
|
|
|
|
impl<S: Storage<Grid2D>> Sticker<Grid2D, S> for LoggerSticker {
|
|
fn should_stick<R: Rng>(&self, rng: &mut R, space: &S, position: &Grid2D) -> bool {
|
|
if self.inner.should_stick(rng, space, position) {
|
|
println!("{:?}", position);
|
|
}
|
|
|
|
false
|
|
}
|
|
}
|
|
|
|
struct ReadOnlyVectorStorage {
|
|
inner: VectorStorage,
|
|
}
|
|
|
|
impl Storage<Grid2D> for ReadOnlyVectorStorage {
|
|
fn is_occupied(&self, position: &Grid2D) -> bool {
|
|
self.inner.is_occupied(position)
|
|
}
|
|
|
|
fn deposit(&mut self, position: &Grid2D) {
|
|
eprintln!("Write ignore for space at {position:?}");
|
|
}
|
|
}
|
|
|
|
pub fn surface_probability_measure(seed: u64, max_particles: usize, stick_probability: f32) -> DLASystem<SmallRng, Grid2D, VectorStorage, LocalRandomWalker, UniformSpawner, ProbabilisticSticking> {
|
|
DLASystem::new(
|
|
SmallRng::seed_from_u64(seed),
|
|
VectorStorage::new(1600, 3),
|
|
LocalRandomWalker,
|
|
UniformSpawner,
|
|
ProbabilisticSticking { stick_probability },
|
|
max_particles,
|
|
)
|
|
}
|