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 🙏

© 2024 – Pkg Stats / Ryan Hefner

cubic-beziers-through-points

v0.0.7

Published

A function to fit fair (bending energy minimizing) cubic bezier curves through a set of given ordered points in the plane.

Downloads

83

Readme

Bug reports, pull requests and ⭐⭐⭐⭐⭐s are welcome and appreciated!

Overview

This is a simple library exporting a single function, cubicBeziersThroughPoints, to fit fair (bending energy minimizing) cubic bezier curves through a set of given ordered points in the plane.

Note that it is assumed the first and last points are connected (implicitly) so that it forms a loop. This is not a technical requirement though and the code can easily be modified to accomodate open endpoints as well.

The pink curves between yellow points are the calculated cubic bezier curves

Features

Why?

I read this article on Medium and implemented it for closed loops (as suggested in the comments by solving a Tridiagonal Matrix).

The result was a very smooth curve and is actually the unique algebraically C² smooth piecewise cubic bezier curve that interpolates the given set of points and is certainly useful in many applications. However, the problem was that it often resulted in curves with loops (but I believe only if the points are not too well-behaved, i.e. when certain angle conditions are not met; please see the research paper quoted above for further details).

This library solves the above 'bezier-curves-with-loops' problem by minimizing the bending energy of the bezier curves under the constraint that the 'terminal speeds' equal exactly 1.

This library now also exports the function cubicBeziersThroughPoints_C2.

Installation

npm install cubic-beziers-through-points

This package is ESM only. It can be used in Node.js or in a browser.

Usage

Node.js

import { cubicBeziersThroughPoints } from 'cubic-beziers-through-points';

// define some points (there must be at least 3!)
const points = [[6.4, 4.8], [15, 5], [1, 4], [10, 4]];
const cubics = cubicBeziersThroughPoints(points);
console.log(cubics);  //=> [[[6, 4],[8.982969047258369, 4.461526569343107]...]]]
// ...

Browsers - directly, without a bundler, using the pre-bundled minified .js file

Please note that no tree shaking will take place in this case.

<!doctype html>

<html lang="en">
<head>
    <script type="module">
        import { cubicBeziersThroughPoints } from './node_modules/cubic-beziers-through-points/browser/index.min.js';

        // define some points (there must be at least 3!)
        const points = [[6.4, 4.8], [15, 5], [1, 4], [10, 4]];
        const cubics = cubicBeziersThroughPoints(points);
        console.log(cubics);  //=> [[[6, 4],[8.982969047258369, 4.461526569343107]...]]]
        // ...
    </script>
</head>

<body>Check the console.</body>

</html>

Bundlers (Webpack, Rollup, ...)

Tree shaking will take place if supported by your bundler.

Webpack will be taken as an example here.

Since your webpack config file might still use CommonJS you must rename webpack.config.js to webpack.config.cjs.

If you are using TypeScript:

Since this is an ESM only library you must use resolve-typescript-plugin in your webpack.config.cjs file.

npm install --save-dev resolve-typescript-plugin

and follow the instructions given at resolve-typescript-plugin.

Additionally, follow this guide.

License

Public Domain and/or WTFPL v. 4.0

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENCE Version 4.0, July 2019

[2023 Floris Steenkamp]

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENCE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION

  1. You just DO WHAT THE FUCK YOU WANT TO.