Skip to main content

A lightweight TypeScript library for creating and manipulating 2d vectors. Works in browser and on the server.

This package works with Node.js, Deno, Bun, BrowsersIt is unknown whether this package works with Cloudflare Workers
It is unknown whether this package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
76%
Published
a year ago (1.0.6)

simple-2d-vectors

A lightweight TypeScript library for creating and manipulating 2d vectors. I created it because all vector libraries out there were either too old, depending on browser API or too heavy.

https://www.npmjs.com/package/simple-2d-vectors

https://github.com/lunarW1TCH/simple-2d-vectors

Quick start

import { Vector } from 'simple-2d-vectors';

const vector = new Vector([3, 4]);

Parameters

Most methods require you to pass a PointLike datatype, which is a union between a Vector, a Point and an ArrayPoint:

type PointLike = Vector | Point | ArrayPoint;
type Point = {
  x: number;
  y: number;
};
type ArrayPoint = [number, number];
class Vector implements Point {
  // ...
}

No matter which type you choose, the result will be the same.

const v1 = new Vector([3, 4]);
const v2 = new Vector({ x: 3, y: 4 });
const v3 = new Vector(v1);

Methods

Methods called on a vector object modify it in-place. To avoid changing the original object you can either first copy the vector or use the static version of a method (most methods have both static and non-static versions).

const vec = new Vector([3, 4]);

const copy1 = vec.copy();
const copy2 = new Vector(vec);

copy1.add([1, 2]); // `vec` isn't affected by this operation
copy2.add([1, 2]); // neither by this one

const newVector = Vector.add([3, 4], [1, 2]); // returns a new vector
Method Non-static Static Non-static params Static params Returns Description
copy() Vector Returns a copy of a vector.
add() param: Pointlike paramA: PointLike, paramB: PointLike Vector Sums individually x and y components.
subtract() param: Pointlike paramA: PointLike, paramB: PointLike Vector Subtracts x and y components from each other.
multiply() param: Pointlike paramA: PointLike, paramB: PointLike Vector Multiplies x and y components.
divide() param: Pointlike paramA: PointLike, paramB: PointLike Vector Divides x and y components.
invertX() Vector Inverts x component of a vector.
invertY() Vector Inverts y component of a vector.
invert() Vector Inverts both components of a vector.
magnitude() param: Pointlike number Returns magnitude/length of the vector.
setMagnitude() newMag: number param: Pointlike, newMag: number Vector Sets the magnitude/length of the vector to the provided value (>= 0) while keeping its direction.
normalize() param: Pointlike Vector Sets length/magnitude of a vector to 1 while keeping its direction.
rotateBy() radians: number param: Pointlike, radians: number Vector Rotates the vector by the provided value (in radians).
rotateByDeg() degrees: number param: Pointlike, degrees: number Vector Rotates the vector by the provided value (in degrees).
rotateTo() radians: number param: Pointlike, radians: number Vector Rotates vector to a provided angle (in radians), counting from the positive X axis, while keeping its magnitude.
rotateToDeg() degrees: number param: Pointlike, degrees: number Vector Rotates vector to a provided angle (in degrees), counting from the positive X axis, while keeping its magnitude.
dotProduct() param: PointLike paramA: Pointlike, paramB: PointLike number Returns a dot products of two vectors.
angle() param: PointLike number Returns the angle (in radians) between any Vector(x, 0) and the original vector, where x is positive.
angleDeg() param: PointLike number Returns the angle (in degrees) between any Vector(x, 0) and the original vector, where x is positive.
angleBetween() param: PointLike paramA: Pointlike, paramB: PointLike number Returns the angle (in radians) between original vector and provided vector.
angleBetweenDeg() param: PointLike paramA: Pointlike, paramB: PointLike number Returns the angle (in degrees) between original vector and provided vector.
toString() string Returns a string representation of a vector '(x, y)'.
toPoint() Point Returns x and y components as a Point.
toArray() ArrayPoint Returns x and y components as an ArrayPoint.
fromPoints() paramA: Pointlike, paramB: PointLike Vector Returns a vector which is a path between two provided points.
fromAngle() radians: number, length?: number Vector Returns a vector with a provided angle (in radians) counting from positive X axis. Length is optional and defaults to 1.

Properties

Property Type Description
x number x component of a Vector
y number y component of a Vector

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@lunarweb/simple-2d-vectors

Import symbol

import * as simple__d_vectors from "@lunarweb/simple-2d-vectors";
or

Import directly with a jsr specifier

import * as simple__d_vectors from "jsr:@lunarweb/simple-2d-vectors";

Add Package

pnpm i jsr:@lunarweb/simple-2d-vectors
or (using pnpm 10.8 or older)
pnpm dlx jsr add @lunarweb/simple-2d-vectors

Import symbol

import * as simple__d_vectors from "@lunarweb/simple-2d-vectors";

Add Package

yarn add jsr:@lunarweb/simple-2d-vectors
or (using Yarn 4.8 or older)
yarn dlx jsr add @lunarweb/simple-2d-vectors

Import symbol

import * as simple__d_vectors from "@lunarweb/simple-2d-vectors";

Add Package

npx jsr add @lunarweb/simple-2d-vectors

Import symbol

import * as simple__d_vectors from "@lunarweb/simple-2d-vectors";

Add Package

bunx jsr add @lunarweb/simple-2d-vectors

Import symbol

import * as simple__d_vectors from "@lunarweb/simple-2d-vectors";