Skip to content

Theboiboi8/simple_2d_vector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simple 2D Vector

GitHub code size in bytes Static Badge

Simple grid-based 2-dimensional vectors in Rust

Getting Started

To get started with simple_2d_vector, add it to your project using cargo add simple_2d_vector.

You can then use it by using the provided Vector2D struct.

Examples

Creating a Vector2D with Vector2D::new() and comparing it to a Vector2D::null()

use vector2d::Vector2D;

fn main() {
    let vector = Vector2D::new(
        (0.0, 0.0).into(), // The origin of the vector
        (0.0, 0.0).into()  // The target of the vector
    );
    
    // Null vectors are vectors with a length of zero
    // They are also called zero-length vectors as they only have an origin
    let null_vector = Vector2D::null((0.0, 0.0)); // A null vector
    
    assert_eq!(vector, null_vector); // The two vectors are the same
}

Performing addition and subtraction with vectors

use vector2d::Vector2D;

fn main() { 
    let vector1 = Vector2D::new(
        (10.0, 10.0).into(), 
        (10.0, 5.0).into()
    );
    
    let vector2 = Vector2D::new(
        (10.0, 10.0).into(), 
        (5.0, 10.0).into()
    );
    
    let result_vector_addition = Vector2D::new(
        (10.0, 10.0).into(), 
        (15.0, 15.0).into()
    );
    
    let result_vector_subtraction = Vector2D::new(
        (10.0, 10.0).into(), 
        (5.0, -5.0).into()
    );
    
    assert_eq!(vector1 + vector2, result_vector_addition);
    assert_eq!(vector1 - vector2, result_vector_subtraction);
}

Shifting a vector

use vector2d::Vector2D;

fn main() { 
    let vector = Vector2D::new(
        (10.0, 10.0).into(), 
        (10.0, 5.0).into()
    );
    
    // `Vector2D.shift` automatically converts applicable types into f32
    let shift = (-2i16, 1.25); // This allows for a mismatch of types
    
    // Shifting a vector moves only its `origin`,
    // as it's `target` is relative to its `origin`
    let result_vector = Vector2D::new(
        (8.0, 11.25).into(), 
        (10.0, 5.0).into()
    );
    
    assert_eq!(vector.shift(shift), result_vector);
}

About

A Rust library for 2-dimensional vectors

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages