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 🙏

© 2025 – Pkg Stats / Ryan Hefner

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;