ilya-buligin / math2d.js

Библиотека для работа с двухмерной векторной алгеброй.

Home Page:https://github.com/AgentX001/math2d.js

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

math2d.js

Минималистичная JavaScript библиотека math2d.js предназначна для работы с простейшими двухмерными геометрическими объектами. В данный момент библиотека реализует классы Point и Vector . Эти классы могут использоваться для хранения различных величин и простейших векторных алгебраических вычислений, например, можно рассчитать расстояние между двумя точками, или сложить точку и вектор. Библиотека разрабатывается мной для использования в собственном игровом проекте.

На данный момент библиотека переписана на ES-2015 и полностью покрыта юнит тестами.

Часто задаваемый вопрос - почему разделены сущности Point и Vector, которые с точки зрения математики являются одним и тем же. Дело в том, что согласно моему личному опыту так удобней. В Point мы храним только координаты, а в Vector - направление и модуль перемещения.

Демо

В демо используется предыдущая версия библиотеки.

agentx001.github.io/demo2/

Документация

Добавленные к стандартным классам функции

Number.prototype.toDeg()

Переводит радины в градусы.

(Math.PI).toDeg();
//returns 180

Number.prototype.toRad()

Переводит градусы в радианы.

(180).toRad();
//returns 3.141592653589793

CanvasRenderingContext2D.prototype.drawPoint(Point)

Условно рисует на контексте точку.

Point

Класс двухмерной точки. Предназначен для хранения координат и математических вычислений над ними.

Создание

var point = new Point(x, y);

Свойства

  • x- координата X;
  • y - координата Y.

Методы

Point.distanceTo(point: Point);

Возвращает расстояние до точки.

Point.directionTo(point: Point);

Возвращает угол, между осью X и прямой, созданной через две точки.

var point0 = new Point(10, 10),
    point1 = new Point(20, 20);
    
    point0.distanceTo(point1);
    //14.142135623730951
    
    let angle = point0.directionTo(point1);
    angle.toDeg();
    //returns 45
Point.add(point: Point);

Складывает координаты точек.

Point.sub(point: Point);

Вычитает координаты точек.

Point.addVector(vector: Vector);

Прибавляет к точке вектор.

Point.subVector(vector: Vector);

Вычитает из точки вектор.

Point.multi(factor: number);

Умножает координаты точки на число.

Point.rotate(angle: number, center: Point);

Поворачивает точку вокруг центра, заданного другой точкой на указанный угол.

Point.round();

Округляет координаты точки до ближайшего целого.

Point.copy();

Возвращает копию точки.

var enemyPosition = new Point(10, 9);
var targetPoint = enemyPosition.copy();
enemyPosition == targetPoint;
//returns false 
(enemyPosition.x == targetPoint.x && enemyPosition.y == targetPoint.y);
//returns true
Point.toString();

Преобразовывает точку в строку.

(new Point(10, 9)).toString();
//returns "x: 10; y: 9"

Также есть аналогичные методы Point.toObject(); и Point.toArray();, которые преобразовывают точку в объект и массив соответственно.

Vector

Вектор, который задается направлением и длиной. В основном используется, как вектор перемещения.

Создание

Вектор можно создать двумя способами. Явно, указав направление и длину:

var vector = new Vector(length: number, direction: number);

Или с помощью статического метода Vector.fromPoints(...);, указав начальную и конечную точки по которым следует построить вектор.

var vector = Vector.fromPoints(beginPoint: Point, endPoint: Point);

Свойства

  • length : number - длина вектора;
  • direction : number - направление вектора. Задается, как угол в радинах между осью X и вектором.
  • endPoint : Point (Read Only) - динамически вычисляемое свойство вектора, которое хранит его координаты.

Методы

Vector.multi(factor: number);

Скалярно умножает вектор на число.

Vector.rotate(angle: number);

Поворачивает вектор на заданный угол.

Vector.copy();

Создает копию вектора.

Vector.toString();

Преобразовывает вектор в строку вида "length: 10; direction: 0".

About

Библиотека для работа с двухмерной векторной алгеброй.

https://github.com/AgentX001/math2d.js


Languages

Language:JavaScript 79.4%Language:HTML 20.6%