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

numeric-ninja

v1.0.2

Published

Simple math library with vectors and utilities

Downloads

18

Readme

numeric-ninja

Table of content

Vector

export declare class Vector2 {
  x: number;
  y: number;

  constructor(x: number = 0, y: number = 0);

  set(x: number, y: number): void;
  setVector2(vector: Vector2): void;

  add(value: Vector2): Vector2;
  add(value: number): Vector2;

  sub(value: Vector2): Vector2;
  sub(value: number): Vector2;

  mul(value: Vector2): Vector2;
  mul(value: number): Vector2;

  div(value: Vector2): Vector2;
  div(value: number): Vector2;

  isEqual(vector: Vector2): boolean;
  getMagnitude(): number;
  getSqrMagnitude(): number;
  getNormalized(): Vector2;
  normalize(): void;

  static lerp(v1: Vector2, v2: Vector2, t: number): Vector2;
  static lerpUnclamped(v1: Vector2, v2: Vector2, t: number): Vector2;
  static dotProduct(v1: Vector2, v2: Vector2): number;
  static reflect(v1: Vector2, v2: Vector2): Vector2;
  static angle(from: Vector2, to: Vector2): number;
  static distance(v1: Vector2, v2: Vector2): number;

  static zeroVector(): Vector2;
  static oneVector(): Vector2;
  static upVector(): Vector2;
  static downVector(): Vector2;
  static leftVector(): Vector2;
  static rightVector(): Vector2;

  toString(): string;
  clone(): Vector2;
}
export declare class Vector3 {
  x: number;
  y: number;
  z: number;

  constructor(x: number = 0, y: number = 0, z: number = 0);

  set(x: number, y: number, z: number): void;
  setVector3(vector: Vector3): void;

  add(value: Vector3): Vector3;
  add(value: number): Vector3;

  sub(value: Vector3): Vector3;
  sub(value: number): Vector3;

  mul(value: Vector3): Vector3;
  mul(value: number): Vector3;

  div(value: Vector3): Vector3;
  div(value: number): Vector3;

  isEqual(vector: Vector3): boolean;
  getMagnitude(): number;
  getSqrMagnitude(): number;
  getNormalized(): Vector3;
  normalize(): void;

  static lerp(v1: Vector3, v2: Vector3, t: number): Vector3;
  static lerpUnclamped(v1: Vector3, v2: Vector3, t: number): Vector3;
  static dotProduct(v1: Vector3, v2: Vector3): number;
  static reflect(v1: Vector3, v2: Vector3): Vector3;
  static angle(from: Vector3, to: Vector3): number;
  static distance(v1: Vector3, v2: Vector3): number;

  static zeroVector(): Vector3;
  static oneVector(): Vector3;
  static upVector(): Vector3;
  static downVector(): Vector3;
  static leftVector(): Vector3;
  static rightVector(): Vector3;

  toString(): string;
  clone(): Vector3;
}

public

Components of the vector

Vector2

x: number;
y: number;

Vector3

x: number;
y: number;
z: number;

set and setVector

Sets values to the current class

Vector2

set(x: number, y: number): void;
setVector2(vector: Vector2): void;

Vector3

set(x: number, y: number, z: number): void;
setVector3(vector: Vector3): void;

add, sub, mul and div

All arithmetic operations return a new vector instance

Vector2

// addition
add(value: Vector2): Vector2;
add(value: number): Vector2;

// subtract
sub(value: Vector2): Vector2;
sub(value: number): Vector2;

// multiplication
mul(value: Vector2): Vector2;
mul(value: number): Vector2;

// division
div(value: Vector2): Vector2;
div(value: number): Vector2;

Vector3

// addition
add(value: Vector3): Vector3;
add(value: number): Vector3;

// subtract
sub(value: Vector3): Vector3;
sub(value: number): Vector3;

// multiplication
mul(value: Vector3): Vector3;
mul(value: number): Vector3;

// division
div(value: Vector3): Vector3;
div(value: number): Vector3;

isEqual

Returns true if the given vector is equal to this vector.

Vector2

isEqual(vector: Vector2): boolean;

Vector3

isEqual(vector: Vector3): boolean;

getMagnitude()

Returns the length of this vector

Vector2 and Vector3

getMagnitude(): number;

getSqrMagnitude()

Returns the squared length of this vector

Vector2 and Vector3

  getSqrMagnitude(): number;

getNormalized()

Returns this vector with a magnitude of 1

Vector2

  getNormalized(): Vector2;

Vector3

  getNormalized(): Vector3;

normalize()

Makes this vector have a magnitude of 1

Vector2 and Vector3

  normalize(): void;

toString()

Returns a vector in string representation

Vector2

  toString(): string; // `x: 0, y: 0`

Vector3

  toString(): string; // `x: 0, y: 0, z: 0`

clone()

Returns a copy of the current vector

Vector2

  clone(): Vector2;

Vector3

  clone(): Vector3;

Static

lerp

Linearly interpolates between vectors v1 and v2 by t.

Vector2

lerp(v1: Vector2, v2: Vector2, t: number): Vector2;

Vector3

lerp(v1: Vector3, v2: Vector3, t: number): Vector3;

lerpUnclamped

Linearly interpolates between vectors v1 and v2 by t.

Vector2

lerpUnclamped(v1: Vector2, v2: Vector2, t: number): Vector2;

Vector3

lerpUnclamped(v1: Vector3, v2: Vector3, t: number): Vector3;

dotProduct

Dot Product of two vectors.

Vector2

dotProduct(v1: Vector2, v2: Vector2): number;

Vector3

dotProduct(v1: Vector3, v2: Vector3): number;

reflect

Reflects a vector off the vector defined by a normal.

Vector2

reflect(v1: Vector2, v2: Vector2): Vector2;

Vector3

reflect(v1: Vector3, v2: Vector3): Vector3;

angle

Gets the unsigned angle in degrees between from and to.

Vector2

angle(from: Vector2, to: Vector2): number;

Vector3

angle(from: Vector3, to: Vector3): number;

distance

Returns the distance between v1 and v2.

Vector2

distance(v1: Vector2, v2: Vector2): number;

Vector3

distance(v1: Vector3, v2: Vector3): number;

Vector2 constants

zeroVector(): Vector2; // new Vector2(0, 0)
oneVector(): Vector2; // new Vector2(1, 1);
upVector(): Vector2; // new Vector2(0, 1);
downVector(): Vector2; // new Vector2(0, -1);
leftVector(): Vector2; // new Vector2(-1, 0);
rightVector(): Vector2; // new Vector2(1, 0);

Vector3 constants

zeroVector(): Vector3; // new Vector3(0, 0, 0);
oneVector(): Vector3; // new Vector3(1, 1, 1);
upVector(): Vector3; // new Vector3(0, 1, 0);
downVector(): Vector3; // new Vector3(0, -1, 0);
leftVector(): Vector3; // new Vector3(-1, 0, 0);
rightVector(): Vector3; // new Vector3(1, 0, 0);
forwardVector(): Vector3; // new Vector3(0, 0, 1);
backVector(): Vector3; // new Vector3(0, 0, -1);

Utils

export declare class Utils {
  static degToRad: number;
  static radToDeg: number;
  static halfFullAngleInDeg: number; // 180
  static fullAngleInDeg: number; // 360

  static clamp(value: number, minValue: number, maxValue: number): number;
  static clamp01(value: number): number;
  static lerp(a: number, b: number, t: number): number;
  static lerpUnclamped(a: number, b: number, t: number): number;
  static inverseLerp(a: number, b: number, value: number): number;
  static lerpAngle(a: number, b: number, t: number): number;
  static repeat(value: number, length: number): number;
  static pingPong(value: number, length: number): number;
  static deltaAngle(current: number, target: number): number;
  static isEqualNum(x: number, y: number): boolean;
  static getRandomFloatInRange01(minInclusive: number, maxExclusive: number): number;
  static getRandomIntInRange(minInclusive: number, maxExclusive: number): number;
  static isNumber(value: number): boolean;
  static isNumeric(value: number | string): boolean;
}