Skip to content

Latest commit

 

History

History
108 lines (95 loc) · 3.71 KB

README.md

File metadata and controls

108 lines (95 loc) · 3.71 KB

Bezier-Cpp

Build Status <<<<<<< HEAD v0.1

v0.2

pre_release Codacy Badge

Fast and lightweight class for using the Bezier curves of any order in C++

Algorithm implementations are based on A Primer on Bezier Curves by Pomax

Key Features

  • Any number of control points
  • Fast operations on curves <<<<<<< HEAD
  • Dynamic manipulation

Implemented methods

  • Get value, curvature, tangent and normal for parameter t
  • Get t from projection any point onto a curve
  • Get derivative curve
  • Split into two subcurves
  • Find extremes and bounding box
  • Find points of intersection with another curve
  • Elevate/lower order
  • Manipulate control points
  • Manipulate dot on curve (only for quadratic and cubic curves)

In development

  • v0.2 indev Bezier polycurves
    • Create polycurve
    • Equivalent methods from Bezier curves
    • Adding and removing curves
    • Curve continuity
      • Parametric continuity
      • Geometric continuity
    • Document polycurve features
    • More sophisticated example
  • v0.3 planned Bezier shapes =======
  • Dynamic manipulation
  • Composite Bezier curves (polycurves)

CMake find_package() compatible!

find_package(Bezier)
target_link_libraries(target bezier)

Implemented methods

  • Get value, derivative, curvature, tangent and normal for parameter t
  • Get t from projection any point onto a curve
  • Get precise length for any part of curve
  • Get a derivative curve (hodograph)
  • Split into two subcurves
  • Find curve roots and bounding box
  • Find points of intersection with another curve
  • Elevate/lower order
  • Apply parametric and geometric continuities
  • etc.

Wish list

- [ ] Polycurve - oversee continuities between consecutive sub-curves
- [ ] Polycurve - propagation of sub-curve manipulation depending on continutiy
- [ ] Bezier shapes
- [ ] More sophisticated example

pre_release

Dependencies

  • c++11
  • Eigen3

Instalation

System-wide installation

git clone https://github.com/stribor14/Bezier-cpp
mkdir Bezier-cpp/build
cd Bezier-cpp/build
cmake ..
make
make install

ROS

  • for use within a ROS workspace without the system-wide installation, clone the repo to src folder in you catkin workspace

Example program [OUTDATED]

A small Qt5 based program written as a playground for manipulating Bezier curves. <<<<<<< HEAD

Usage

  • Starts with two Bezier curves (with 4 and 5 control points respectively)
  • Zoom in/out: Ctrl + mouse wheel
  • Manipulate control point or point on curve: Left mouse buttom
  • Project mouse pointer on all curves and show tangent: Right mouse buttom
  • Split curve at mouse point: Middle mouse buttom
  • Raise order of the curve: Double left click
  • Lower order of the curve Double right click
  • Toggle bounding boxes and curve intersections: Double middle click =======
  • press H for a list of possible actions

pre_release

Additional dependencies

  • qt5-default

Licence

Apache License Version 2.0