@swim/math implements common mathematical and geometric structures and
operators. @swim/math implements vectors, points, lines, and shapes, with
standard algebraic and computational geometry operators, including containment
and intersection testing. @swim/math is part of the
@swim/core
framework.
The Shape interface provides a base type for geometric shapes that can be
containment and intersection tested. The Shape.fromAny factory method
coerces plain JavaScript objects, of type AnyShape, to polymorphic Shape
instances.
The R2Shape base class extends Shape with 2D-specific operations.
PointR2, SegmentR2, BoxR2, and CircleR2 make up the standard R2Shape
implementations. VectorR2 represents a vector in 2D real space.
For an npm-managed project, npm install @swim/math to make it a dependency.
TypeScript sources will be installed into node_modules/@swim/math/main.
Transpiled JavaScript and TypeScript definition files install into
node_modules/@swim/math/lib/main. And a pre-built UMD script can
be found in node_modules/@swim/math/dist/main/swim-math.js.
Alternatively, the standalone swim-system.js script may be loaded
from the Swim CDN, which bundles @swim/math together with all other
@swim/system
libraries.
When loaded by a web browser, the swim-core.js script adds all
@swim/math library exports to the global swim namespace.
The swim-system.js script also adds all @swim/math library exports
to the global swim namespace, making it a drop-in replacement for
swim-core.js when additional @swim/system libraries are needed.
@swim/math
@swim/math implements common mathematical and geometric structures and operators. @swim/math implements vectors, points, lines, and shapes, with standard algebraic and computational geometry operators, including containment and intersection testing. @swim/math is part of the @swim/core framework.
Overview
@swim/math defines standard types for linear and affine algebraic structures and operators, as well as generic geometric shape interfaces.
Shapes
The
Shape
interface provides a base type for geometric shapes that can be containment and intersection tested. TheShape.fromAny
factory method coerces plain JavaScript objects, of typeAnyShape
, to polymorphicShape
instances.Shape.fromAny({x: 2, y: 3}); // PointR2.of(2, 3) Shape.fromAny({x0: 0, y0: 1, x1: 1, y1: 0}); // SegmentR2.of(0, 1, 1, 0) Shape.fromAny({xMin: 0, yMin: 0, xMax: 1, yMax: 1}); // BoxR2.of(0, 0, 1, 1) Shape.fromAny({cx: 0, cy: 0, r: 1}); // CircleR2.of(0, 0, 1)
2D Real Space
The
R2Shape
base class extendsShape
with 2D-specific operations.PointR2
,SegmentR2
,BoxR2
, andCircleR2
make up the standardR2Shape
implementations.VectorR2
represents a vector in 2D real space.PointR2.of(2, 3).plus(VectorR2.of(1, -1)); // PointR2.of(3, 2) PointR2.of(3, 2).minus(PointR2.of(2, 3)); // VectorR2.of(1, -1) CircleR2.of(3, 3, 2).intersects(egmentR2.of(0, 0, 4, 4)); // true CircleR2.of(3, 3, 2).contains(SegmentR2.of(0, 0, 4, 4)); // false CircleR2.of(3, 3, 2).contains(SegmentR2.of(3, 3, 4, 4)); // true
R2Function
represents a linear map, andR2Operator
corresponds to an invertible linear operator.Installation
npm
For an npm-managed project,
npm install @swim/math
to make it a dependency. TypeScript sources will be installed intonode_modules/@swim/math/main
. Transpiled JavaScript and TypeScript definition files install intonode_modules/@swim/math/lib/main
. And a pre-built UMD script can be found innode_modules/@swim/math/dist/main/swim-math.js
.Browser
Browser applications can load
swim-core.js
, which comes bundled with the @swim/math library, directly from the Swim CDN.<script src="https://cdn.swim.ai/js/latest/swim-core.js"></script>
Alternatively, the standalone
swim-system.js
script may be loaded from the Swim CDN, which bundles @swim/math together with all other @swim/system libraries.<script src="https://cdn.swim.ai/js/latest/swim-system.js"></script>
Usage
ES6/TypeScript
@swim/math can be imported as an ES6 module from TypeScript and other ES6-compatible environments.
import * as math from "@swim/math";
CommonJS/Node.js
@swim/math can also be used as a CommonJS module in Node.js applications.
var math = require("@swim/math");
Browser
When loaded by a web browser, the
swim-core.js
script adds all @swim/math library exports to the globalswim
namespace.The
swim-system.js
script also adds all @swim/math library exports to the globalswim
namespace, making it a drop-in replacement forswim-core.js
when additional @swim/system libraries are needed.