Skip to content

Commit

Permalink
update README
Browse files Browse the repository at this point in the history
  • Loading branch information
stribor14 committed Mar 30, 2020
1 parent 7c4d0f4 commit e66ac85
Showing 1 changed file with 43 additions and 25 deletions.
68 changes: 43 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,62 @@
# Bezier-Cpp
[![Build Status](https://travis-ci.com/stribor14/Bezier-cpp.svg?branch=master)](https://travis-ci.com/stribor14/Bezier-cpp)
![v0.2.0](https://img.shields.io/badge/version-0.2.0-blue.svg)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/aceb46ce7de1407abd56cfc127dba5f1)](https://www.codacy.com/app/stribor14/Bezier-cpp?utm_source=github.com&utm_medium=referral&utm_content=stribor14/Bezier-cpp&utm_campaign=Badge_Grade)

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

*Algorithm implementations are based on [A Primer on Bezier Curves](https://pomax.github.io/bezierinfo/) by Pomax*

## Key Features
- dynamic operations
- any order of curve
- optimized for real-time calculations

## Implementeed 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)
- Any number of control points
- Fast operations on curves
- Dynamic manipulation
- Composite Bezier curves (polycurves)

## 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.

## In development
- <img src="https://img.shields.io/badge/v.0.2.1-planned-yellow.svg" alt="v0.2.1 indev" align="top"> Bezier polycurves
- [ ] Polycurve - oversee continuities between consecutive sub-curves
- [ ] Polycurve - propagation of sub-curve manipulation depending on continutiy
- [ ] More sophisticated example
- <img src="https://img.shields.io/badge/v.0.3-planned-red.svg" alt="v0.3 planned" align="top"> Bezier shapes

## Dependencies
- c++11
- Eigen3

*Add compile flag* `-march=native` *when compiling to use vectorization with Eigen.*
## Instalation
CMake *find_package()* compatible!
```
find_package(BezierCpp)
target_link_libraries(target BezierCpp)
```
### System-wide installation
```
git clone https://github.com/stribor14/Bezier-cpp
mkdir Bezicer-cpp/build
cd Bezicer-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
## Example program __[OUTDATED]__
A small Qt5 based program written as a playground for manipulating Bezier curves.
### 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

### Additional dependencies
- qt5-default
Expand Down

0 comments on commit e66ac85

Please sign in to comment.