bezier

Creator: coderz1093

Last updated:

Add to Cart

Description:

bezier

bezier.dart is a simple open-source Dart library for handling 2D Bézier curve math.
The library was developed, documented, and published by Aaron Barrett and Isaac Barrett. It is based heavily on the work of Pomax, including his excellent Primer on Bézier Curves and his original JavaScript library, Bezier.js.
We're trying to design bezier.dart to be both platform independent and context independent. You can run the library anywhere you can run Dart: in a web browser, in a Flutter application, server side, and beyond.
For live examples of the library's API, see the project page at dartographer.com/bezier.
Features #

Supports both quadratic and cubic two dimensional Bézier curves
Calculate the coordinates of a point at any parameter value t along a curve
Derivative and normal values at any t parameter value
Accurate length approximations (using the Legendre-Gauss quadrature algorithm)
Split a curve into equivalent subcurves between any t parameter values
Find the extrema of a curve on both the x and y axes
Calculate the bounding box for a curve
Given any curve, derive a new curve, offset from the original curve along the normals at a given distance
Calculate the positions of a curve's intersections with itself, with another curve, or with a line segment
Find points evenly spaced along the arc length of a curve
Heavily documented and tested
Straightforward, readable code

Getting Started #

Add the following to your project's pubspec.yaml and run pub get.

dependencies:
bezier: any
copied to clipboard

Import bezier.dart from a file in your project. In most cases you will also want to import the vector_math library.

import "package:vector_math/vector_math.dart";
import "package:bezier/bezier.dart";
copied to clipboard
Examples #

Instantiate a Bézier curve.

import "package:vector_math/vector_math.dart";
import "package:bezier/bezier.dart";

void main() {
// bezier.dart supports both quadratic curves...
final quadraticCurve = QuadraticBezier([
Vector2(-40.0, -40.0),
Vector2(30.0, 10.0),
Vector2(55.0, 25.0)
]);

// ...and cubic curves!
final cubicCurve = CubicBezier([
Vector2(10.0, 10.0),
Vector2(70.0, 95.0),
Vector2(25.0, 20.0),
Vector2(15.0, 80.0)
]);
}
copied to clipboard

Compute a point along a curve at t of 0.75.

import "package:vector_math/vector_math.dart";
import "package:bezier/bezier.dart";

void main() {
final curve = QuadraticBezier([
Vector2(10.0, 10.0),
Vector2(70.0, 95.0),
Vector2(15.0, 80.0)
]);

final computedPoint = curve.pointAt(0.75);
}
copied to clipboard

Split a curve between the t parameter values of 0.2 and 0.6.

import "package:vector_math/vector_math.dart";
import "package:bezier/bezier.dart";

void main() {
final curve = CubicBezier([
Vector2(10.0, 10.0),
Vector2(70.0, 95.0),
Vector2(25.0, 20.0),
Vector2(15.0, 80.0)
]);

final subcurve = curve.subcurveBetween(0.2, 0.6);
}
copied to clipboard

Find the intersection t values between a curve and a line segment.

import "package:vector_math/vector_math.dart";
import "package:bezier/bezier.dart";

void main() {
final curve = QuadraticBezier([
Vector2(10.0, 500.0),
Vector2(50.0, 0.0),
Vector2(90.0, 500.0)
]);

final lineStart = Vector2(0.0, 400.0);
final lineEnd = Vector2(100.0, 410.0);

final intersections = curve.intersectionsWithLineSegment(lineStart, lineEnd);
}
copied to clipboard

Derive an offset curve (composed of a series of subcurves) at distance 12.0.

import "package:vector_math/vector_math.dart";
import "package:bezier/bezier.dart";

void main() {
final curve = CubicBezier([
Vector2(10.0, 10.0),
Vector2(15.0, 95.0),
Vector2(20.0, 95.0),
Vector2(25.0, 10.0)
]);

final subcurves = curve.offsetCurve(12.0);
}
copied to clipboard
Style, Formatting, Philosophy #
We've made our best effort to conform to the recommendations outlined in the Effective Dart guide. Accordingly, this library is formatted using dartfmt.
As fervent believers in the value of clean code, we are constantly seeking to improve the library and make it easier to work with. Please alert us to any issues you notice, no matter how trivial. We wholeheartedly welcome criticism and friendly debate! 🤓
Running Automated Tests #
To run the test cases from the terminal, run the following command from the bezier.dart root directory.
pub run test
copied to clipboard
Most IDEs now provide interfaces for running tests, which are generally easier to work with. In most cases you can simply right click on a test file or directory in the project tree view and select the menu option to run the selected tests.
Submitting bugs, requesting features #
Please file feature requests and bugs using the GitHub issues tab.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.