• Stars
    star
    864
  • Rank 52,774 (Top 2 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A JavaScript library for doing geometry.

Geometric.js

A JavaScript library for doing geometry.

Installation

Web browser

In vanilla, a geometric global is exported. You can use the latest version from unpkg.

<script src="https://unpkg.com/[email protected]/build/geometric.js"></script>
<script src="https://unpkg.com/[email protected]/build/geometric.min.js"></script>

If you'd rather host it yourself, download the latest release from the build directory.

npm

npm i geometric -S
const geometric = require("geometric");

API

Geometric.js uses the geometric primitives points, lines, and polygons.

  • Points are represented as arrays of two numbers, such as [0, 0].
  • Lines are represented as arrays of two points, such as [[0, 0], [1, 0]]. Because they have endpoints, these are technically line segments, but Geometric.js refers to them as lines for simplicity's sake.
  • Polygons are represented as arrays of vertices, each of which is a point, such as [[0, 0], [1, 0], [1, 1], [0, 1]]. Polygons can be closed – the first and last vertex are the same – or open.
  • There are also functions to calculate relationships between these primitives.

You will also encounter angles, areas, distances, and lengths.

  • Angles are represented as numbers, measured in degrees. Geometric.js also provides functions to convert angles from degrees to radians or vice versa.
  • Areas, distances, and lengths are represented as numbers, measured in pixels.

Points

# geometric.pointRotate(point, angle[, origin]) · Source, Example

Returns the coordinates resulting from rotating a point about an origin by an angle in degrees. If origin is not specified, the origin defaults to [0, 0].

# geometric.pointTranslate(point, angle, distance) · Source, Example

Returns the coordinates resulting from translating a point by an angle in degrees and a distance.


Lines

# geometric.lineAngle(line) · Source, Example

Returns the angle of a line, in degrees, with respect to the horizontal axis.

# geometric.lineInterpolate(line[, clamp]) · Source, Example

Returns an interpolator function given a line [a, b]. The returned interpolator function takes a single argument t, where t is a number in [0, 1]; a value of 0 returns a, while a value of 1 returns b. Intermediate values interpolate from a to b along the line segment.

By default, the interpolator will return points outside of the line segment if t is less than 0 or greater than 1. You can pass an optional boolean indicating whether to clamp the returned point to inside of the line segment, even if t is greater than 1 or less than 0.

# geometric.lineLength(line) · Source, Example

Returns the length of a line.

# geometric.lineMidpoint(line) · Source, Example

Returns the midpoint of a line.

# geometric.lineRotate(line, angle[, origin]) · Source, Example

Returns the coordinates resulting from rotating a line about an origin by an angle in degrees. If origin is not specified, the origin defaults to the midpoint of the line.

# geometric.lineTranslate(line, angle, distance) · Source, Example

Returns the coordinates resulting from translating a line by an angle in degrees and a distance.


Polygons

# geometric.polygonArea(polygon[, signed]) · Source, Example

Returns the area of a polygon. You can pass a boolean indicating whether the returned area is signed, which defaults to false.

# geometric.polygonBounds(polygon) · Source, Example

Returns the bounds of a polygon, ignoring points with invalid values (null, undefined, NaN, Infinity). The returned bounds are represented as an array of two points, where the first point is the top-left corner and the second point is the bottom-right corner. For example:

const rectangle = [[0, 0], [0, 1], [1, 1], [1, 0]];
const bounds = geometric.polygonBounds(rectangle); // [[0, 0], [1, 1]]

Returns null if the polygon has fewer than three points.

# geometric.polygonCentroid(polygon) · Source, Example

Returns the weighted centroid of a polygon. Not to be confused with a mean center.

# geometric.polygonHull(points) · Source, Example

Returns the convex hull, represented as a polygon, for an array of points. Returns null if the input array has fewer than three points. Uses Andrew’s monotone chain algorithm.

# geometric.polygonInterpolate(polygon]) · Source, Example

Returns an interpolator function given a polygon of vertices [a, ..., n]. The returned interpolator function takes a single argument t, where t is a number in [0, 1]; a value of 0 returns a, while a value of 1 returns n. Intermediate values interpolate from a to n along the polygon's perimeter.

# geometric.polygonLength(polygon) · Source, Example

Returns the length of a polygon's perimeter.

# geometric.polygonMean(polygon) · Source, Example

Returns the arithmetic mean of the vertices of a polygon. Keeps duplicate vertices, resulting in different values for open and closed polygons. Not to be confused with a centroid.

# geometric.polygonRandom([sides[, area[, centroid]]]) · Source, Example

Returns the vertices of a random convex polygon of the specified number of sides, area, and centroid coordinates. If sides is not specified, defaults to 3. If area is not specified, defaults to 100. If centroid is not specified, defaults to [0, 0]. The returned polygon's winding order will be counter-clockwise. Based on an algorithm by Pavel Valtr and an implementation by Maneesh Agrawala.

# geometric.polygonReflectX(polygon[, reflectFactor]) · Source, Example

Reflects a polygon over its vertical midline. Pass an optional reflectFactor between 0 and 1, where 1 indicates a full reflection, 0 leaves the polygon unchanged, and 0.5 collapses the polygon on its vertical midline.

# geometric.polygonReflectY(polygon[, reflectFactor]) · Source, Example

Reflects a polygon over its horizontal midline. Pass an optional reflectFactor between 0 and 1, where 1 indicates a full reflection, 0 leaves the polygon unchanged, and 0.5 collapses the polygon on its horizontal midline.

# geometric.polygonRegular([sides[, area[, center]]]) · Source, Example

Returns the vertices of a regular polygon of the specified number of sides, area, and center coordinates. If sides is not specified, defaults to 3. If area is not specified, defaults to 100. If center is not specified, defaults to [0, 0]. The returned polygon's winding order will be counter-clockwise.

# geometric.polygonRotate(polygon, angle[, origin]) · Source, Example

Returns the vertices resulting from rotating a polygon about an origin by an angle in degrees. If origin is not specified, the origin defaults to [0, 0].

# geometric.polygonScale(polygon, scaleFactor[, origin]) · Source, Example

Returns the vertices resulting from scaling a polygon by a scaleFactor (where 1 is the polygon's current size) from an origin point. If origin is not specified, the origin defaults to the polygon's centroid.

The returned polygon's area is equal to the input polygon's area multiplied by the square of the scaleFactor. To scale the polygon's area by the scaleFactor itself, see geometric.polygonScaleArea.

# geometric.polygonScaleArea(polygon, scaleFactor[, origin]) · Source, Example

Returns the vertices resulting from scaling a polygon by a scaleFactor (where 1 is the polygon's current size) from an origin point. If origin is not specified, the origin defaults to the polygon's centroid.

The returned polygon's area is equal to the input polygon's area multiplied by the scaleFactor. To scale the polygon's area by the square of the scaleFactor, see geometric.polygonScale.

# geometric.polygonScaleX(polygon, scaleFactor[, origin]) · Source, Example

Returns the vertices resulting from scaling the horizontal coordinates of a polygon by a scaleFactor (where 1 is the polygon's current size) from an origin point. The vertical coordinates remain unchanged. If origin is not specified, the origin defaults to the polygon's centroid.

The returned polygon's area is equal to the input polygon's area multiplied by the scaleFactor.

# geometric.polygonScaleY(polygon, scaleFactor[, origin]) · Source, Example

Returns the vertices resulting from scaling the vertical coordinates of a polygon by a scaleFactor (where 1 is the polygon's current size) from an origin point. The horizontal coordinates remain unchanged. If origin is not specified, the origin defaults to the polygon's centroid.

The returned polygon's area is equal to the input polygon's area multiplied by the scaleFactor.

# geometric.polygonTranslate(polygon, angle, distance) · Source, Example

Returns the vertices resulting from translating a polygon by an angle in degrees and a distance.

# geometric.polygonWind(polygon[, order]) · Source, Example

Returns a polygon in the specified winding order. If an order string is passed as either "cw" or "clockwise", returns a polygon with a clockwise winding order. Otherwise, returns a polygon with a counter-clockwise winding order. Returns null if the polygon has fewer than three points.

On computer screens where the top-left corner is at [0, 0], a polygon with a negative signed area has a counter-clockwise winding order.


Relationships

# geometric.lineIntersectsLine(lineA, lineB) · Source, Example

Returns a boolean representing whether lineA intersects lineB.

# geometric.lineIntersectsPolygon(line, polygon) · Source, Example

Returns a boolean representing whether a line intersects a polygon.

# geometric.pointInPolygon(point, polygon) · Source, Example

Returns a boolean representing whether a point is inside of a polygon. Uses ray casting.

# geometric.pointOnPolygon(point, polygon[, epsilon]) · Source, Example

Returns a boolean representing whether a point is located on one of the edges of a polygon. An optional epsilon number, such as 1e-6, can be passed to reduce the precision with which the relationship is measured.

# geometric.pointOnLine(point, line[, epsilon]) · Source, Example

Returns a boolean representing whether a point is collinear with a line and is also located on the line segment. An optional epsilon number, such as 1e-6, can be passed to reduce the precision with which the relationship is measured. See also pointWithLine.

# geometric.pointWithLine(point, line[, epsilon]) · Source, Example

Returns a boolean representing whether a point is collinear with a line. An optional epsilon number, such as 1e-6, can be passed to reduce the precision with which the relationship is measured. See also pointOnLine.

# geometric.pointLeftofLine(point, line) · Source, Example

Returns a boolean representing whether a point is to the left of a line.

# geometric.pointRightofLine(point, line) · Source, Example

Returns a boolean representing whether a point is to the right of a line.

# geometric.polygonInPolygon(polygonA, polygonB) · Source, Example

Returns a boolean representing whether polygonA is contained by polygonB.

# geometric.polygonIntersectsPolygon(polygonA, polygonB) · Source, Example

Returns a boolean representing whether polygonA intersects but is not contained by polygonB.


Angles

# geometric.angleReflect(incidence, surface) · Source, Example

Returns the angle of reflection given a starting angle, also known as the angle of incidence, and the angle of the surface off of which it is reflected.

# geometric.angleToDegrees(angle) · Source

Returns the result of converting an angle in radians to the same angle in degrees.

# geometric.angleToRadians(angle) · Source

Returns the result of converting an angle in degrees to the same angle in radians.

More Repositories

1

d3-regression

Calculate statistical regressions from two-dimensional data.
JavaScript
144
star
2

d3-geo-scale-bar

Displays automatic scale bars for projected geospatial data.
JavaScript
45
star
3

shape2path

Convert SVG shapes to SVG paths
JavaScript
24
star
4

jeezy

JavaScript. Easy.
JavaScript
23
star
5

ba64

A tiny npm module for saving Base64 encoded images that are part of data URLs to your file system.
JavaScript
10
star
6

swiftmap

A JavaScript library for making data-driven maps.
JavaScript
9
star
7

d3-marcon

Margin conventions for d3-selection.
JavaScript
8
star
8

party-time

Convert party abbreviations to full names and back again.
JavaScript
8
star
9

arraygeous

A JavaScript library for lightning fast array manipulation.
JavaScript
8
star
10

swoopy

Draw swoopy lines.
JavaScript
4
star
11

stupid-sheets

A stupid simple Google Sheets reader.
JavaScript
4
star
12

adr-election-node

Scrape data about an election from ADR
JavaScript
4
star
13

sheet2json

A Node.js package for converting each sheet in an .xls or .xlsx file to a .csv file.
JavaScript
3
star
14

quoteShare

A jQuery plugin that lets users share highlighted text on Twitter.
JavaScript
3
star
15

d3-arrow

Attach arrowheads to SVG elements.
JavaScript
3
star
16

logpct

A percent status logger for Node.js
JavaScript
2
star
17

d3-geo-compactness

A JavaScript library for computing the compactness of GeoJSON features.
JavaScript
2
star
18

jquery-scrape

Use jQuery as your selection engine on the result of an HTTP/HTTPS request.
JavaScript
2
star
19

data2grid

Add a row and a column to a set of data so you can lay it out.
JavaScript
1
star
20

inflation-scraper

Get CPI inflation from BLS.
JavaScript
1
star
21

tokenize-file

Read a file, tokenize it, and spit out a handy JSON.
JavaScript
1
star
22

boxes

u can move da boxes
JavaScript
1
star
23

nyt-1917

A node script for tweeting New York Times articles about Russia from 100 years ago.
JavaScript
1
star