### 2 releases

0.1.1 | Jul 11, 2024 |
---|---|

0.1.0 | Jul 11, 2024 |

#**803** in Algorithms

**MIT**license

31KB

783 lines

# Baiser

Baiser is a Rust library designed to work with curves, providing tools for creating and manipulating them with ease. It offers a variety of curve types, including Bezier curves of different orders, and utilities for composing curves. One of the library's key features is the ability to adjust curves to have linear speed, making it particularly useful for animations, and any application where consistent movement along a curve is required.

## Features

**Bezier Curves**: Supports Bézier curves of up to third order (

(dot),`Bezier0`

( line),`Bezier1`

,`Bezier2`

), allowing for a wide range of shapes and motions.`Bezier3`**Composed Curve**: Enables the combination of multiple curves into a single, continuous path.**Curve Manipulation**: Provides functionality to calculate points and tangents along curves, making it easier to work with geometric shapes.**Linear Speed Adjustment**: Includes a

struct that adjusts a given curve to ensure a linear relationship between time and distance traveled along the curve.`LinearSpeed`**Any Point Type**: Curves work well with any point type implementing the

trait. For data types that implement`CurvePoint`

trait, building a linear speed curve is as simple as calling`Distance`

method.`Curve`linear_speed`::`

## Usage

Here's a quick example of how to create a linear speed adjusted Bezier curve:

`use` `baiser``::`Curve`;`
`let` linear_speed_curve `=` `Curve``::`cubic_bezier`(`v1`,` v2`,` v3`,` v4`)`
`.``linear_speed``(``/*` table size `*/` `64``,` `/*` steps count `*/` `100``)``;`
`//` Now you can use `linear_speed_curve` for operations requiring linear speed
`let` middle_value `=` linear_speed_curve`.``point_at``(``0.``5``)``;`
`//` An example of building a composed curve
`let` composed_curve `=` `Curve``::`composed`(`p0`)`
`.``line_to``(`p1`,` p2`)`
`.``quadratic_to``(`p3`,` p4`)`
`.``cubic_to``(`p5`,` p6`,` p7`)``;`

## Contributing

Contributions are welcome! Please feel free to submit pull requests or open issues to discuss potential improvements or features.

## License

This project is licensed under the MIT License - see the LICENSE file for details.

#### Dependencies

~150KB