pub struct Vector3D {
pub x: f64,
pub y: f64,
pub z: f64,
}Fields§
§x: f64§y: f64§z: f64Implementations§
Source§impl Vector3D
impl Vector3D
Sourcepub fn new(x: f64, y: f64, z: f64) -> Vector3D
pub fn new(x: f64, y: f64, z: f64) -> Vector3D
This creates a new 3d vector with the four given entries.
Sourcepub fn length_l1(&self) -> f64
pub fn length_l1(&self) -> f64
This gives back the l1 length of a 3d vector, i.e. the maximum of absolute values of its components.
§Example:
use bb_geometry::vector3d::Vector3D;
let length = Vector3D::new(-5.0, -2.2, 0.0).length_l1();
assert_eq!(length, 5.0);Sourcepub fn is_close_to_zero(self: &Vector3D) -> bool
pub fn is_close_to_zero(self: &Vector3D) -> bool
This checks whether a 3d vector is close to the zero vector, up to crate::ALMOST_ZERO
§Example:
use bb_geometry::ALMOST_ZERO;
use bb_geometry::vector3d::Vector3D;
let a = Vector3D::new(ALMOST_ZERO, ALMOST_ZERO, ALMOST_ZERO);
let b = Vector3D::new(0.99 * ALMOST_ZERO, 0.99 * ALMOST_ZERO, 0.99 * ALMOST_ZERO);
assert_eq!(a.is_close_to_zero(), false);
assert_eq!(b.is_close_to_zero(), true);Sourcepub fn plus(self: &Vector3D, a: &Vector3D) -> Vector3D
pub fn plus(self: &Vector3D, a: &Vector3D) -> Vector3D
This adds two 3d vectors
§Example:
use bb_geometry::vector3d::Vector3D;
let a = Vector3D::new(1.0, 2.0, 4.0);
let b = Vector3D::new(-1.0, 4.0, -3.1);
let c = Vector3D::new(0.0, 6.0, 0.9);
assert!(a.plus(&b).almost_equals(&c));Sourcepub fn minus(self: &Vector3D, a: &Vector3D) -> Vector3D
pub fn minus(self: &Vector3D, a: &Vector3D) -> Vector3D
This subtracts two 3d vectors
§Example:
use bb_geometry::vector3d::Vector3D;
let a = Vector3D::new(1.0, 2.0, 4.0);
let b = Vector3D::new(-1.0, 4.0, -3.1);
let c = Vector3D::new(2.0, -2.0, 7.1);
assert!(a.minus(&b).almost_equals(&c));Sourcepub fn almost_equals(self: &Vector3D, a: &Vector3D) -> bool
pub fn almost_equals(self: &Vector3D, a: &Vector3D) -> bool
This compares two 3d vectors up to crate::ALMOST_ZERO.
§Example:
use bb_geometry::vector3d::Vector3D;
let a = Vector3D::new(1.0, 2.0, 3.0);
let b = Vector3D::new(1.00001, 2.0, 3.0);
let c = Vector3D::new(1.0000000001, 2.0, 3.0);
assert_eq!(a.almost_equals(&b), false);
assert_eq!(a.almost_equals(&c), true);Sourcepub fn revert(&self) -> Vector3D
pub fn revert(&self) -> Vector3D
This replaces a 3d vector with its negative
§Examples
use bb_geometry::vector3d::Vector3D;
let a = Vector3D::new(1.0, 2.0, 3.0);
let b = Vector3D::new(-1.0, -2.0, -3.0);
assert!(a.revert().almost_equals(&b));Sourcepub fn generate_random_vectors(n: usize) -> Vec<Vector3D>
pub fn generate_random_vectors(n: usize) -> Vec<Vector3D>
This generates a 3d vector of length n containing randomly generated 4d vectors.
§Example:
use bb_geometry::vector3d::Vector3D;
let n = 10;
let list = Vector3D::generate_random_vectors(n);
assert_eq!(list.len(), n);Sourcepub fn random_vector() -> Vector3D
pub fn random_vector() -> Vector3D
This generates a random 3d vector with entire between -1.0 and 1.0.
§Example:
use bb_geometry::vector3d::Vector3D;
let a = Vector3D::random_vector();
assert!(a.length_l1() <= 1.0);pub fn from_reference(vector_reference: &Vector3D) -> Vector3D
pub fn components(&self) -> [f64; 3]
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Vector3D
impl RefUnwindSafe for Vector3D
impl Send for Vector3D
impl Sync for Vector3D
impl Unpin for Vector3D
impl UnwindSafe for Vector3D
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