pub struct HyperbolicDisk {
pub disk_radius: PositiveReal,
pub point: Hyperbolic<3>,
}Expand description
Randomly distribute points locally on a hyperboloid.
HyperbolicDisk is a uniform distribution of points within distance r
of a point on the 2-dimensional hyperboloid.
§Example
use hoomd_manifold::{
Hyperbolic, HyperbolicAngle, HyperbolicDisk, HyperbolicRotate,
HyperbolicRotationMatrix, Minkowski,
};
use hoomd_vector::Metric;
use rand::{RngExt, SeedableRng, distr::Distribution, rngs::StdRng};
let mut rng = StdRng::seed_from_u64(12);
let v: HyperbolicAngle = rng.random();
let matrix = HyperbolicRotationMatrix::from(v);
let origin = Minkowski::from([0.0, 0.0, 1.0]);
let random_point = Hyperbolic::from_minkowski_coordinates(
matrix.hyperbolic_rotate(&origin),
);
let r = 0.1;
let mut rng_2 = StdRng::seed_from_u64(239);
let disk = HyperbolicDisk {
disk_radius: r.try_into()?,
point: random_point,
};
let transformed_random_point: Hyperbolic<3> = disk.sample(&mut rng_2);
assert!(r > random_point.distance(&transformed_random_point));
Fields§
§disk_radius: PositiveRealMax distance away from point.
point: Hyperbolic<3>The center of the disk.
Trait Implementations§
Source§impl Clone for HyperbolicDisk
impl Clone for HyperbolicDisk
Source§fn clone(&self) -> HyperbolicDisk
fn clone(&self) -> HyperbolicDisk
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for HyperbolicDisk
impl Debug for HyperbolicDisk
Source§impl<'de> Deserialize<'de> for HyperbolicDisk
impl<'de> Deserialize<'de> for HyperbolicDisk
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>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Distribution<Hyperbolic<3>> for HyperbolicDisk
impl Distribution<Hyperbolic<3>> for HyperbolicDisk
Source§fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Hyperbolic<3>
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Hyperbolic<3>
Sample a random point in the hyperbolic disk.
The implementation translates Minkowski 3-vector point along
the Hyperbolic by maximum distance of disk_radius. Note that because SO(2,1) is
non-Abelian, the point must be transformed to the cusp before a trial
move is applied (and then the point is transformed back). This ensures
that the max distance translated by the trial move does not exceed disk_radius.
§fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T>where
R: Rng,
Self: Sized,
fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T>where
R: Rng,
Self: Sized,
Create an iterator that generates random values of
T, using rng as
the source of randomness. Read moreSource§impl PartialEq for HyperbolicDisk
impl PartialEq for HyperbolicDisk
Source§impl Serialize for HyperbolicDisk
impl Serialize for HyperbolicDisk
impl StructuralPartialEq for HyperbolicDisk
Auto Trait Implementations§
impl Freeze for HyperbolicDisk
impl RefUnwindSafe for HyperbolicDisk
impl Send for HyperbolicDisk
impl Sync for HyperbolicDisk
impl Unpin for HyperbolicDisk
impl UnwindSafe for HyperbolicDisk
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
Mutably borrows from an owned value. Read more