JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 38
  • Score
    100M100P100Q32656F
  • License MIT

linear or bezier interpolation along a path made from line segments, using binary search

Package Exports

  • lines-path-interpolate
  • lines-path-interpolate/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (lines-path-interpolate) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

lines-path-interpolate

linear/bezier position interpolation for paths made from line segments.

uses binary search for efficiency.

automagicially detects if the lines form a continuous loop.

Installation

npm i lines-path-interpolate

Usage

var lpi = require('lines-path-interpolate');

//each pt is [x,y,z]
var ptA = [0,0,0];
var ptB = [0,0,1];
var ptC = [1,0,1];
var ptD = [1,0,0];

//each segment consists of two 3d points
var segs = [
    [ptA,ptB],
    [ptB,ptC],
    [ptC,ptD],
    [ptD,ptA]    
];

//alternatively, let the library create segments from the pts:
var _segs = lpi.pts2Lines([ptA,ptB,ptC,ptD])

//get linear interpolated point, using fraction of total path length:
var fraction = 0.75;
var pt = lpi.interpAlongLines(segs, fraction); //returns 3d point [x,y,z]

//instead of a fraction of the total path, can also use absolute units:
var theDist = 0.25; 
var pt_by_dist = lpi.interpAlongLines_dist(segs, theDist); 

//get quadratic bezier interpolated point, with interpolant padding:
var fraction = 0.75;
var bezier_padding = 2.0;
var pt_bez = lpi.interpAlongLines_bezier(segs, fraction, bezier_padding); 

//again using distance instead of fraction:
var pt_bez_by_dist = lpi.interpAlongLines_bezier_dist(segs, theDist, bezier_padding); 

//get total path length:
var pathLength = lpi.getTraversedLength(segs);

NOTE:

  • an array of segment lengths gets cached in segs.flatStack after the first query
  • path length is cached in segs.tlength
  • segments are assumed to connect to each other - if they don't, the iterpolated result will "jump" from the end of one segment to the start of the next one
  • automagically detects if the lines form a continuous loop [for bezier interpolation near start/end]

stonks