Skip to content

Latest commit

 

History

History
197 lines (151 loc) · 4.07 KB

File metadata and controls

197 lines (151 loc) · 4.07 KB

Vec.js

version license

            .                 .
    <--------\               /-------->
      <-------\.           ./------->
        <------\\         //------>
          <-----\\.     .//----->
            <----\\\   ///---->
              <---\\\ ///--->
                <--\\Y//-->
                  <-\|/->
                     V

Table of contents

About

JavaScript vector library.

A set of classes that provide functionality related to basic linear-algebra, geometry, and more, for 2, 3, and 4-dimensional vectors.

Installation

npm i @leodeslf/vec.js
pnpm i @leodeslf/vec.js
yarn add @leodeslf/vec.js
bun i @leodeslf/vec.js

CDNs

https://unpkg.com/@leodeslf/vec.js
https://cdn.jsdelivr.net/npm/@leodeslf/vec.js

Usage

Most methods are available as both instance and static members. The ones that modify the current vector return this, thus we can chain method calls. Other than e.g.: vector.x, vector.y, and vector.xy (as an array), vectors are iterable, so it's possible to iterate trough their components using for-of or spread operator (e.g.: ...vector).

// E.g.:
import { Vec2 } from '@leodeslf/vec.js';

const position = new Vec2(1, 1.8);
const target = new Vec2(1, 10);
const distance = position.distance(target); // 8.2
const direction = Vec2.subtract(target, position).normalize(); // { x: 0, y: 1 }

Properties

Name Vec2 Vec3 Vec4
angleW ✓*
angleX ✓* ✓*
angleY ✓* ✓*
angleZ ✓* ✓*
magnitude
magnitudeSq*
w
x
y
z

*Property is readonly.

Shortcuts

To set/get components straight as/from arrays.

Name Vec2 Vec3 Vec4
xy
xyz
xyzw

Alias

For 3D and 4D vector components and shortcuts.

(Name) Alias Vec3 Vec4
(w) a
(x) r
(y) g
(z) b
(xyz) rgb
(xyzw) rgba

Linear Algebra

Name Vec2 Vec3 Vec4
add
angleBetween
cross
distance
distanceChebyshev*
distanceManhattan*
distanceMinkowski*
distanceSq
dot
immutable*
lerp*
negate
normalize
project
rotateX
rotateY
rotateZ
scale
subtract
zero

*Static method only.

Copying & Creating

Name Vec2 Vec3 Vec4
clone
copy
fromCylindricalCoords*
fromPolarCoords*
fromSphericalCoords*
random

*Static method only.

Boolean Conditions

Name Vec2 Vec3 Vec4
satisfyEquality
satisfyOpposition
isInfinite
isNaN
isZero

Magnitude Manipulation

Name Vec2 Vec3 Vec4
limitMax
limitMin
clamp

Miscellaneous

Name Vec2 Vec3 Vec4
lookAt
turnLeft
turnRight

Author

Copyright (c) Leonardo de S. Leal F., 2018-present.

License

MIT License.