geometric-figures-aterehov
v1.0.9
Published
This module allows working with geometric figures
Readme
Геометрические фигуры
Данная библиотека позволяет работать с геометрическими фигурами
Подключение
Необходимо установить покет npm geometric-figures-aterehov:
npm install geometric-figures-aterehov
Затем необходимо импортировать библиотеку:
import gf from "geometric-figures-aterehov"
Дальнейшие вызовы всех методов необходимо производить через gf (напр., gf.Point);
Работа с библиотекой
Библиотека позволяет создавать и работать с различными геометрическими фигурами
Точка (Point)
Представляет собой точку в декартовой системе координат. Для создания необходимо передать координаты x и y:
const p: Point = new Point(x: number, y: number);Возможности точки:
- Получение координат:
p.x: number;
p.y: number;- Сравнение точек. Точки равны, если их координаты одинаковы
p.equals(p2): boolean;Отрезок (Segment)
Отрезок между двумя точками. Точки должны быть разными. Для создания необходимо передать точки:
const s: Segment = new Segment(a: Point, b: Point)Возможности отрезка:
- Получение концов:
s.a: Point;
s.b: Point- Получение перевернутого отрезка (с концами в обратном порядке)
s.reversed: Segment- Получение длины отрезка
s.length: number;- Определение, лежит ли точка на отрезке:
s.containsPoint(p): boolean- Сравнение с другим отрезком. Отрезки равны, если равны их концы, независимо от порядка
s.equals(s2): boolean;- Поиск пересечения с другим отрезком или линией
s.intersectionWith(l: Line | Segment): Point | Segment | nullЛиния (Line)
Представляет собой прямую линию, выраженную либо как k*x + b, либо как y = xshift (для вертикальных линий). Для создания необходимо передать k и b, можно также передать xshift
const l: Line = new Line(k: number, b: number, xshift: number = 0);Для обычных линий xshift игнорируется и равен 0. Для вертикальных линий k = Infinity, b игнорируется и равен 0.
Имеется также возможность создания линии по отрезку, ее содержащему:
const l: Line = Line.fromSegment(s: Segment);Возможности линии
- Получение параметров линии
l.k: number;
l.b: number;
l.xshift: number;- Сравнение с другой линией. Линии равны, если все их параметры равны
l.equals(l2): boolean- Определение параллельности с другой линией. Линии параллельны при одинаковом k
l.parallelTo(l2): boolean- Поиск пересечения с другой линией
l.intersectionWith(l2): Point | Line | null- Определение, лежит ли точка на линии
l.containsPoint(p): boolean- Определение перпендикулярности с другой линией. Вертикальная линия перпендикулярна другой, если k другой == 0, остальные, если произведение их k == -1
l.isPerpendicularTo(l2): booleanОкружность (Circle)
Представляет собой окружность с центром и радиусом. Для создания передается точка центра и радиус
const c: Circle = new Circle(p: Point, r: number);Возможности круга
- Получение параметров (центр и радиус)
c.center: Point;
c.radius: number;- Получение диаметра
c.diameter: number- Получение длины окружности
c.length: number- Получение площади круга
c.area: number- Определение, лежит ли точка на окружности
c.pointLiesOn(p): boolean;- Определение, лежит ли точка внутри окружности (включая саму окружность)
c.pointLiesIn(p): boolean;- Определение, лежит ли отрезок на окружности (т. е. является хордой)
c.segmentLiesOn(s): boolean- Определение, лежит ли отрезок внутри окружности
c.segmentLiesIn(s): boolean- Определение, является ли отрезок радиусом (т. е. один из концов лежит на окружности, а другой является центром)
c.segmentIsRadius(s): boolean- Определение, является ли отрезок диаметром (т. е. ледит на окружности и его длина равна длине диаметра)
c.segmentIsDiameter(s): boolean- Поиск пересечения круга с линией или отрезком
c.intersectionWith(l: Line | Segment): Segment | Point | null- Сравнение с другой окружностью. Окружности равня, если все их параметры равны.
c.equals(c2): booleanДуга (Arc)
Представляет собой часть окружности. Для создания необходимо передать окружность, точки начала и конца дуги, а также любую другую точку, лежащую на дуге. Все точки должны лежать на окружности.
const a: Arc = new Arc(circle: Circle, a: Point, b: Point, c: Point);Возможности дуги
- Получение параметров
a.circle: Circle;
a.a: Point;
a.b: Point;
a.c: Point;- Получение отрезка дуги, соединяющего ее концы
a.segment: Segment- Получение радиусов к различным точкам
a.radiusToA: Segment;
a.radiusToB: Segment;
a.radiusToC: Segment;- Определение, является ли дуга большой или малой (true - большая дуга)
a.isGreaterArc: boolean;- Получение развернутой дуги, у которой концы поменяны местами
a.reversed: Arc;- Получение длины дуги
a.length: number;- Сравнение с другой дугой (равны, если равны их окружность и концы и точка C лежит по одну сторону от отрезка дуги)
a.equals(a2): booleanФигура
Позволяет создавать произвольную фигуру путем последовательного соединения отрезков и/или дуг. Создается через объект-строитель. К нему необходимо добавлять фрагменты фигуры. Начало каждого фрагмента должно быть концом предыдущего. Последний фрагмент должен заканчиваться в точке начала первого. После завершения добавления необходимо вызвать специальный метод build() для получения фигуры.
const f: Figure = new Figure.Builder()
.addFragment(new Segment(p1, p2))
.addFragment(new Arc(circle, p2, p3, p4))
.addFragment(new Segment(p3, p1))
.build();Возможности фигуры
- Получение списка фрагментов
f.fragments: readonly (Segment | Arc)[];- Поиск индекса фрагмента в фигуре (при наличии)
f.getFragmentIndex(f: Segment | Arc): number | null;- Получение периметра фигуры
f.perimeter: number;Создание других типов фигур
На основе класса фигуры можно создавать свои типы фигур. Для этого необходимо расширить класс Figure, внутри него создать статический класс, расширяющий класс Figure.Builder, в нем изменить тип поля figure на тип новой фигуры, метод create переопределить так, чтобы он возвращал объект новой фигуры, при необходимости переопределить методы addFragment и build. Новая фигура будет иметь все возможности обычной фигуры. Можео добавлять к ней свои возможности. ниже описаны две таких фигуры, включенные в библиотеку - прямоугольник и треугольник.
Треугольник
Фигура, состоящая из трех отрезков, пересекающихся только своими концами. Создается аналогично обычной фигуре.
Возможности треугольника
Указаны только те возможности, которых нет в обычной фигуре
- Получение площади треугольника
t.area: number- Получение угла, противоположного некоторой стороне. Необходимо передать в качестве параметра отрезок, являющийся стороной треугольника. Результат выдается в радианах.
t.getOppositeAngle(s: Segment): number;- Получение высоты, проведенной к одной из сторон. В качестве параметра необходимо передать отрезок, являющийся стороной треугольника
t.getHeightTo(s: Segment): Segment;Прямоугольник
Фигура, состоящая из четырех отрезков, пересекающихся только своими концами, где каждый перпендикулярен предыдущему. Создается аналогично обычной фигуре.
Возможности прямоугольника
Указаны только те возможности, которых нет в обычной фигуре
- Получение площади
r.area: number;