Struct BHQuadtree

Source
pub struct BHQuadtree { /* private fields */ }
Expand description

A Quadtree specially optimized for the Barnes-Hut algorithm

An interactive explanation of the algorithm can be found here

This quadtree is immutable and flat, not recursive. It is optimized to be rebuilt frequently and supports efficient accumulation of approximated force. Each step, convert your items into WeightedPoint and call the build method to clear and reconstruct the tree. Then for each item you need to accumulate force on, call the accumulate method, passing a custom force function.

This implementation is heavily inspired by DeadlockCode’s Barnes-Hut implementation

Implementations§

Source§

impl BHQuadtree

Source

pub fn new(theta: f32) -> Self

Create a new empty BHQuadtree with a given theta parameter

Source

pub fn build(&mut self, items: Vec<WeightedPoint>, node_capacity: usize)

Clear all internal data and reconstruct the tree from a sequence of weighted points

Source

pub fn accumulate<F: Fn(WeightedPoint) -> Vec2>( &self, target: Vec2, force_fn: F, ) -> Vec2

Accumulate a force vector to act on a target position with an arbitrary force function, approximating weighted points based on the theta parameter.

Trait Implementations§

Source§

impl Debug for BHQuadtree

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.