Минималистичная JavaScript библиотека math2d.js предназначна для работы с простейшими двухмерными геометрическими объектами. В данный момент библиотека реализует классы Point и Vector . Эти классы могут использоваться для хранения различных величин и простейших векторных алгебраических вычислений, например, можно рассчитать расстояние между двумя точками, или сложить точку и вектор. Библиотека разрабатывается мной для использования в собственном игровом проекте.
На данный момент библиотека переписана на ES-2015 и полностью покрыта юнит тестами.
Часто задаваемый вопрос - почему разделены сущности Point и Vector, которые с точки зрения математики являются одним и тем же. Дело в том, что согласно моему личному опыту так удобней. В Point мы храним только координаты, а в Vector - направление и модуль перемещения.
В демо используется предыдущая версия библиотеки.
agentx001.github.io/demo2/
Переводит радины в градусы.
(Math.PI).toDeg();
//returns 180
Переводит градусы в радианы.
(180).toRad();
//returns 3.141592653589793
Условно рисует на контексте точку.
Класс двухмерной точки. Предназначен для хранения координат и математических вычислений над ними.
var point = new Point(x, y);
- x- координата X;
- y - координата Y.
Возвращает расстояние до точки.
Возвращает угол, между осью 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
Складывает координаты точек.
Вычитает координаты точек.
Прибавляет к точке вектор.
Вычитает из точки вектор.
Умножает координаты точки на число.
Поворачивает точку вокруг центра, заданного другой точкой на указанный угол.
Округляет координаты точки до ближайшего целого.
Возвращает копию точки.
var enemyPosition = new Point(10, 9);
var targetPoint = enemyPosition.copy();
enemyPosition == targetPoint;
//returns false
(enemyPosition.x == targetPoint.x && enemyPosition.y == targetPoint.y);
//returns true
Преобразовывает точку в строку.
(new Point(10, 9)).toString();
//returns "x: 10; y: 9"
Также есть аналогичные методы Point.toObject();
и Point.toArray();
, которые преобразовывают точку в объект и массив соответственно.
Вектор, который задается направлением и длиной. В основном используется, как вектор перемещения.
Вектор можно создать двумя способами. Явно, указав направление и длину:
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) - динамически вычисляемое свойство вектора, которое хранит его координаты.
Скалярно умножает вектор на число.
Поворачивает вектор на заданный угол.
Создает копию вектора.
Преобразовывает вектор в строку вида "length: 10; direction: 0"
.