pub struct UniformIn<S, C> {
pub boundary: C,
pub template_sites: Vec<S>,
}Expand description
Generate bodies uniformly in the given boundary condition.
Give UniformIn a template vector of sites and it will randomly generate
bodies uniformly distributed in the given boundary. Each generated body will
have the same sites (cloned from template_sites) and random body properties
sampled in the given boundary.
§Example
Place points at random locations in the boundary:
use hoomd_geometry::{IsPointInside, shape::Rectangle};
use hoomd_mc::{BodyDistribution, UniformIn};
use hoomd_microstate::{Body, boundary::Closed, property::Point};
use hoomd_vector::Cartesian;
use rand::{SeedableRng, distr::Distribution, rngs::StdRng};
let rectangle = Closed(Rectangle::with_equal_edges(5.0.try_into()?));
let mut rng = StdRng::seed_from_u64(1);
let uniform_in = UniformIn {
boundary: rectangle,
template_sites: vec![Point::new(Cartesian::from([0.0, 0.0]))],
};
let body: Body<Point<Cartesian<2>>, Point<Cartesian<2>>> =
uniform_in.sample(0, &mut rng);
assert!(
uniform_in
.boundary
.0
.is_point_inside(&body.properties.position)
);Place oriented bodies at random locations in the boundary and give them random orientations:
use rand::{SeedableRng, rngs::StdRng};
use std::f64::consts::PI;
use hoomd_geometry::{IsPointInside, shape::Rectangle};
use hoomd_mc::{BodyDistribution, UniformIn};
use hoomd_microstate::{
Body,
boundary::Closed,
property::{OrientedPoint, Point},
};
use hoomd_vector::{Angle, Cartesian};
let rectangle = Closed(Rectangle::with_equal_edges(5.0.try_into()?));
let mut rng = StdRng::seed_from_u64(1);
let uniform_in = UniformIn {
boundary: rectangle,
template_sites: vec![
Point::new(Cartesian::from([-1.0, 0.0])),
Point::new(Cartesian::from([1.0, 0.0])),
],
};
let body: Body<OrientedPoint<Cartesian<2>, Angle>, Point<Cartesian<2>>> =
uniform_in.sample(0, &mut rng);
assert!(
uniform_in
.boundary
.0
.is_point_inside(&body.properties.position)
);
assert!(body.properties.orientation.theta < 2.0 * PI);Fields§
§boundary: CGenerate bodies inside this boundary.
template_sites: Vec<S>Give each generated body these sites.
Trait Implementations§
Source§impl<V, O, S, C> BodyDistribution<Body<OrientedPoint<V, O>, S>> for UniformIn<S, C>where
S: Clone,
C: Distribution<V>,
StandardUniform: Distribution<O>,
Randomly place oriented bodies in a given boundary.
impl<V, O, S, C> BodyDistribution<Body<OrientedPoint<V, O>, S>> for UniformIn<S, C>where
S: Clone,
C: Distribution<V>,
StandardUniform: Distribution<O>,
Randomly place oriented bodies in a given boundary.
sample chooses the body’s position randomly in the given boundary and also
assigns a uniform random orientation. Sites, therefore, may be placed outside
the boundary. Callers should reject insertions appropriately when add_body
fails.
Source§impl<V, S, C> BodyDistribution<Body<Point<V>, S>> for UniformIn<S, C>where
S: Clone,
C: Distribution<V>,
Randomly place point bodies in a given boundary.
impl<V, S, C> BodyDistribution<Body<Point<V>, S>> for UniformIn<S, C>where
S: Clone,
C: Distribution<V>,
Randomly place point bodies in a given boundary.
sample chooses the body’s position randomly in the given boundary. Sites,
therefore, may be placed outside the boundary. Callers should reject insertions
appropriately when add_body fails.
Source§impl<'de, S, C> Deserialize<'de> for UniformIn<S, C>where
S: Deserialize<'de>,
C: Deserialize<'de>,
impl<'de, S, C> Deserialize<'de> for UniformIn<S, C>where
S: Deserialize<'de>,
C: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl<S, C> StructuralPartialEq for UniformIn<S, C>
Auto Trait Implementations§
impl<S, C> Freeze for UniformIn<S, C>where
C: Freeze,
impl<S, C> RefUnwindSafe for UniformIn<S, C>where
C: RefUnwindSafe,
S: RefUnwindSafe,
impl<S, C> Send for UniformIn<S, C>
impl<S, C> Sync for UniformIn<S, C>
impl<S, C> Unpin for UniformIn<S, C>
impl<S, C> UnwindSafe for UniformIn<S, C>where
C: UnwindSafe,
S: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more