npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@creenv/vector

v1.0.3

Published

N-dimensions classes for vectors. Abstraction for a vector class, implementation of Vector2, Vector3, Vector4.

Downloads

25

Readme

@creenv/vector

The Creative Environment vector implements a generic n-dimensional Vector class which can handle any number of components. @creenv/vector also implements 3 children of such a class, Vector2, Vector3 and Vector4.

How to use

import Vector from '@creenv/vector';

// 2 components vector
let vec2 = new Vector(10.5, 0.7);

// 5 components vector 
let vec5 = new Vector(10, 20, -4, 10.5, 78);

It is also possible to use children classes Vector2, Vector3 and Vector4 to have access to x, y, z, w components:

import Vector2 from '@creenv/vector/vector2';
import Vector4 from '@creenv/vector/vector4';

// 2 components vector
let vec2 = new Vector2(10.5, 0.7);

// we can now access the components like so 
let x = vec2.x;
let y = vec2.y;

// 4 components vector 
let vec4 = new Vector3(12, -3, 5, 7);

// we can now access the components like so 
let x = vec4.x;
let y = vec4.y;
let z = vec4.z;
let w = vec4.w;

Chaining operations

Most of the methods returns this, which means it is possible to chain operations:

let vec = new Vector(10,10,10);
vec.add(5,5,5).substract(3,3,3).multiplyScalar(2);

console.log(vec.components); // expected output: [24, 24, 24]

Full doc

Following is a full list of availaible methods via the Vector class.


constructor (...components)

The number of arguments sent to the constructor will determine the dimesions of the vector. 4 arguments will result in a 4-dimentional vector.


static Vector.fromVector (vector: Vector)

Because we want the vector class to be as fast as possible, its constructor needs to perform as less actions as possible. In order to achieve such an effect, a "copy constructor" cannot be used because it would require some more tests and computations within the constructor. Therefore such a copy is possible through this static method

| Name | Type | Def | |---|---|---| vector | Vector | The Vector to copy from |

@Return a new vector, which has the same components as vector.


getter .length

Returns the length of the vector, computed as Math.sqrt(xx + yy + z*z +...)

// example 
let vec = new Vector2(10,20);

console.log(vec.length); // expected output 22,36067977...

vec.x = 2;
vec.y = 4;

console.log(vec.length); // expected output 4,472135954...

.set(x,y,z,...)

Updates the value of the vector's components. Same behavious than constructor. If one of the components is set to null or undefined, it won't be updated.

| Name | Type | Def | |---|---|---| |...component | ...number | The new components of the vector |

// example 
let vec = new Vector(12,11,5);

// updating all the components 
vec.set(-2,4,7);
console.log(vec.components); // expected: [-2, 4, 7]

// updating only Y 
vec.set(null,18);
console.log(vec.components); // expected [-2, 18, 7]

.copy()

Returns a copy a this vector. Required if modifying the Vector has to be avoided.


.apply(func: Function)

Applies a function func to all the components of this vector.

| Name | Type | Def | |---|---|---| |func | Function | The function that will be applied to this vector. Does sending arguments to that function is not possible |

// example 
let vec = new Vector(10,50);
vec.apply(x => x/10);
console.log(vec.components); // expected ouput [1; 5]

@Return Vector: this vector, can be used to chain operations


.add(...components: ...number)

Adds the components in parameter to the components of the vector

| Name | Type | Def | |---|---|---| |...components | ...number | The components that will be added to their corresponding component |

// example 
let vec = new Vector(12,11,10);
vec.add(4,0,2);

console.log(vec.components); // expected output [16, 11, 12]

@Return Vector: this vector, can be used to chain operations


.addVector(vector: Vector)

Adds the @param vector to this vector.

| Name | Type | Def | |---|---|---| |vector | Vector | vector to be added to this vector, needs to have at least the same number of dimensions |

// example 
let vec = new Vector(12,11,10),
    vec2 = new Vector2(4,0,2);
vec.addVector(vec2);

console.log(vec.components); // expected output [16, 11, 12]

@Return Vector: this vector, can be used to chain operations


.addScalar(scalar: number)

Adds the @param scalar number to all the components of this vector.

| Name | Type | Def | |---|---|---| |scalar | number | the scalar number that will be added to all the components |

// example 
let vec = new Vector(10,11,12);
vec.addScalar(5);

console.log(vec.components); // expected output: [15, 16, 17]

@Return Vector: this vector, can be used to chain operations


.substract(...components: ...number)

Substracts the components in parameter to the components of the vector

| Name | Type | Def | |---|---|---| |...components | ...number | the components that will be substracted to the corresponding components of this vector |

// example 
let vec = new Vector(12,11,10);
vec.substract(4,0,2);

console.log(vec.components); // expected output [8, 11, 8]

@Return Vector: this vector, can be used to chain operations


.substractVector(vector: Vector)

Substract the @param vector to this vector.

| Name | Type | Def | |---|---|---| |vector | Vector | vector to be substracted to this vector, needs to have at least the same number of dimensions |

// example 
let vec = new Vector(12,11,10),
    vec2 = new Vector2(4,0,2);
vec.substractVector(vec2);

console.log(vec.components); // expected output [8, 11, 8]

@Return Vector: this vector, can be used to chain operations


.substractScalar(scalar: number)

Substracts the @param scalar number to all the components of this vector.

| Name | Type | Def | |---|---|---| |scalar | number | the scalar number that will be substracted to all the components |

// example 
let vec = new Vector(10,11,12);
vec.substractScalar(5);

console.log(vec.components); // expected output: [5, 6, 7]

@Return Vector: this vector, can be used to chain operations


.multiply(...components: ...number)

Multiplies the components in parameter to the components of the vector

| Name | Type | Def | |---|---|---| |...components | ...number | the components that will be multiplied with the corresponding components of this vector |

// example 
let vec = new Vector(12,11,10);
vec.multiply(4,0,2);

console.log(vec.components); // expected output [48, 0, 20]

@Return Vector: this vector, can be used to chain operations


.multiplyVector(vector: Vector)

Multiplies the components of @param vector with the components of this vector, 1 to 1.

| Name | Type | Def | |---|---|---| |vector | Vector | vector to be multiplied with this vector, needs to have at least the same number of dimensions |

// example 
let vec = new Vector(12,11,10),
    vec2 = new Vector2(4,0,2);
vec.multiplyVector(vec2);

console.log(vec.components); // expected output [48, 0, 20]

@Return Vector: this vector, can be used to chain operations


.multiplyScalar(scalar: number)

Mutiplies the components of this vector with the @param scalar number.

| Name | Type | Def | |---|---|---| |scalar | number | the scalar number that will be multiplied with all the components |

// example 
let vec = new Vector(10,11,12);
vec.multiplyScalar(5);

console.log(vec.components); // expected output: [50, 55, 60]

@Return Vector: this vector, can be used to chain operations


.divide(...components: ...number)

Divides the components of this vector by the components in argument

| Name | Type | Def | |---|---|---| |...components | ...number | the components that will be divided to the corresponding components of this vector |

// example 
let vec = new Vector(12,11,10);
vec.divide(4,1,2);

console.log(vec.components); // expected output [3, 11, 2]

@Return Vector: this vector, can be used to chain operations


.divideVector(vector: Vector)

Divides the components of this vector by the corresponding components of @param vector

| Name | Type | Def | |---|---|---| |vector | Vector | vector to be divided to this vector, needs to have at least the same number of dimensions |

// example 
let vec = new Vector(12,11,10),
    vec2 = new Vector2(4,1,2);
vec.divideVector(vec2);

console.log(vec.components); // expected output [3, 11, 2]

@Return Vector: this vector, can be used to chain operations


.divideScalar(scalar: number)

Divides the components of this vector by the @param scalar number.

| Name | Type | Def | |---|---|---| |scalar | number | the scalar number that will be divided to all the components |

// example 
let vec = new Vector(10,11,12);
vec.divideScalar(2);

console.log(vec.components); // expected output: [5, 5.5, 6]

@Return Vector: this vector, can be used to chain operations


.dot(vector: Vector)

Returns the dot product between this vector and the @param vector.

| Name | Type | Def | |---|---|---| |vector | number | the vector to compute dot product with |

// example 
let u = new Vector(12,5,8),
    v = new Vector(-1,0,4),
    dotProd = u.dot(v); // expected value: 20

@Return number


.cross(vector: Vector)

Returns the cross product between this vector and the @param vector.

| Name | Type | Def | |---|---|---| |vector | number | the vector to compute cross product with. Needs to have the same number of dimensions that this vector |

// example 
let u = new Vector(4,3,-2),
    v = new Vector(12,7,0);

let w = u.cross(v);
  
console.log(w.components); // expected value: [14; -24; -8]

@Return Vector: a new Vector, cross product of this and vector


.normalize()

Normalize the components of the vector so its length is equal to 1

// example 
let vec3 = new Vector3(10,20,30);
console.log(vec3.length); // expected ouput: [10, 20, 30] 37.416573867739416

vec3.normalize();
console.log(vec3.components, vec3.length); // [0.2672612419124244, 0.5345224838248488, 0.8017837257372731] 0.9999999999999999

.equals(vector: Vector)

Tests if this vector and @param vector have the same number of dimensions and equal components.

| Name | Type | Def | |---|---|---| |vector | number | the vector to to test this with|

// example
let vec = new Vector(10,20,30),
    vec2 = new Vector(10,11);
console.log(vec.equals(vec2)); // expected output: false

let vec_ = new Vector(10,20,30),
    vec2_ = new Vector(10,20,31);
console.log(vec_.equals(vec2_)); // expected output: false

let vec__ = new Vector(10,20,30),
    vec2__ = new Vector(10,20,30);
console.log(vec__.equals(vec2__)); // expected ouput: true