Struct quantized_density_fields::qdf::QDF
source · pub struct QDF<S>where
S: State,{ /* private fields */ }
Expand description
Object that represents quantized density fields.
Concept
MOST IMPORTANT NODE: QDF does not exists in any space - it IS the space, it describes it, so there are no space coordinates. To sample specified region you have to know some space and gather the rest of information based on it neighbors. It gives the ability to cotrol space density at specified locations, which can be used for example to simulate space curvature based on gravity.
Implementations§
source§impl<S> QDF<S>where
S: State,
impl<S> QDF<S>where
S: State,
sourcepub fn dimensions(&self) -> usize
pub fn dimensions(&self) -> usize
Gets QDF dimensions number.
Examples
use quantized_density_fields::QDF;
let qdf = QDF::new(2, 9);
assert_eq!(qdf.dimensions(), 2);
sourcepub fn state(&self) -> &S
pub fn state(&self) -> &S
Gets QDF dimensions number.
Examples
use quantized_density_fields::QDF;
let qdf = QDF::new(2, 9);
assert_eq!(*qdf.state(), 9);
sourcepub fn space_exists(&self, id: ID) -> bool
pub fn space_exists(&self, id: ID) -> bool
sourcepub fn try_get_space(&self, id: ID) -> Option<&Space<S>>
pub fn try_get_space(&self, id: ID) -> Option<&Space<S>>
sourcepub fn try_set_space_state(&mut self, id: ID, state: S) -> bool
pub fn try_set_space_state(&mut self, id: ID, state: S) -> bool
sourcepub fn set_space_state(&mut self, id: ID, state: S) -> Result<()>
pub fn set_space_state(&mut self, id: ID, state: S) -> Result<()>
sourcepub fn find_space_neighbors(&self, id: ID) -> Result<Vec<ID>>
pub fn find_space_neighbors(&self, id: ID) -> Result<Vec<ID>>
Get list of IDs of given space neighbors or throws error if space does not exists.
Arguments
id
- space id.
Examples
use quantized_density_fields::QDF;
let mut qdf = QDF::new(2, 9);
let id = qdf.root();
qdf.increase_space_density(id);
let subs = qdf.space(qdf.root()).subspace();
assert_eq!(qdf.find_space_neighbors(subs[0]).unwrap(), vec![subs[1], subs[2]]);
sourcepub fn find_path(&self, from: ID, to: ID) -> Result<Vec<ID>>
pub fn find_path(&self, from: ID, to: ID) -> Result<Vec<ID>>
Gets list of space IDs that defines shortest path between two spaces, or throws error if space does not exists.
Arguments
from
- source space id.to
- target space id.
Examples
use quantized_density_fields::QDF;
let mut qdf = QDF::new(2, 9);
let id = qdf.root();
qdf.increase_space_density(id);
let subs = qdf.space(qdf.root()).subspace().to_vec();
qdf.increase_space_density(subs[0]);
let subs2 = qdf.space(subs[0]).subspace();
assert_eq!(qdf.find_path(subs2[0], subs[2]).unwrap(), vec![subs2[0], subs2[1], subs[2]]);
sourcepub fn increase_space_density(&mut self, id: ID) -> Result<()>
pub fn increase_space_density(&mut self, id: ID) -> Result<()>
Increases given space density (subdivide space and rebind it properly to its neighbors), or throws error if space does not exists.
Arguments
id
- space id.
Examples
use quantized_density_fields::QDF;
let mut qdf = QDF::new(2, 9);
let id = qdf.root();
qdf.increase_space_density(id);
assert_eq!(qdf.space(qdf.root()).subspace().len(), 3);
sourcepub fn decrease_space_density(&mut self, id: ID) -> Result<bool>
pub fn decrease_space_density(&mut self, id: ID) -> Result<bool>
Decreases given space density (merge space children and rebind them properly to theirs neighbors if space has 1 level of subdivision, otherwise perform this operation on its subspaces), or throws error if space does not exists.
Arguments
id
- space id.
Examples
use quantized_density_fields::QDF;
let mut qdf = QDF::new(2, 9);
let id = qdf.root();
qdf.increase_space_density(id);
assert_eq!(qdf.space(qdf.root()).subspace().len(), 3);
qdf.decrease_space_density(id);
assert!(qdf.space(qdf.root()).is_platonic());
sourcepub fn decrease_space_density_level(&mut self, id: ID) -> Result<()>
pub fn decrease_space_density_level(&mut self, id: ID) -> Result<()>
Decreases given space density (merge space children and rebind them properly to theirs
neighbors), or throws error if space does not exists. Basically it works like
Self::decrease_space_density()
but merges space to make it completely platonic.
Arguments
id
- space id.