@geometryzen/newton
TypeScript icon, indicating that this package has built-in type declarations

0.9.2 • Public • Published

@geometryzen/newton

A Physics Engine for research and education using Geometric Algebra, and Units of Measure (optional).

The following metrics are supported:

Description Algebra class
Euclidean 1D G(1,0) Engine1
Euclidean 2D G(2,0) Engine2
Euclidean 3D G(3,0) Engine3
Spacetime 1D G(1,1) EngineG11
Spacetime 2D G(2,1) EngineG21

Getting Started

The following code illustrates the basic flow. For working examples see STEMCstudio.

Constructing the core simulation using the Engine3 Euclidean 3D or G(3,0) Physics engine.

This example incorporates units of measure.

import {
    Block3,
    Engine3,
    Geometric3,
    Spring
} from '@geometryzen/newton'

//
// Constants
//
const e1 = Geometric3.e1
const e2 = Geometric3.e2
const e3 = Geometric3.e3
const kg = Geometric3.kilogram
const m = Geometric3.meter
const s = Geometric3.second

//
// Initialization
//
const sim = new Engine3()
const Δt = 0.01 * s

//
// Add objects
//
const width = 0.5 * m
const height = 0.1 * m
const depth = 0.5 * m
const block1 = new Block3(width, height, depth)
const block2 = new Block3(width, height, depth)

block1.M = 1 * kg
block2.M = 1 * kg

block1.X = -1.0 * e1 * m
block2.X = +1.0 * e1 * m

sim.addBody(block1)
sim.addBody(block2)

//
// Add forces
//
const spring = new Spring(block1, block2)
spring.restLength = 1 * m
spring.stiffness = 1 * kg / (s * s)
sim.addForceLaw(spring)
spring.attach1 = (block1.width * e1 + 0 * block1.height * e2 + block1.depth * e3) / 2

// Inside animation "loop"
sim.advance(Δt.a, Δt.uom)

Package Sidebar

Install

npm i @geometryzen/newton

Weekly Downloads

2

Version

0.9.2

License

MIT

Unpacked Size

1.69 MB

Total Files

12

Last publish

Collaborators

  • geometryzen