Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jchavarri/rebez
Cubic bezier implementation in Reason / OCaml.
https://github.com/jchavarri/rebez
animation bezier-curve cubic-bezier easing-functions ocaml reasonml
Last synced: 20 days ago
JSON representation
Cubic bezier implementation in Reason / OCaml.
- Host: GitHub
- URL: https://github.com/jchavarri/rebez
- Owner: jchavarri
- License: mit
- Created: 2019-02-11T11:35:34.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-06-20T12:04:42.000Z (over 5 years ago)
- Last Synced: 2024-10-15T02:34:15.361Z (about 1 month ago)
- Topics: animation, bezier-curve, cubic-bezier, easing-functions, ocaml, reasonml
- Language: OCaml
- Size: 39.1 KB
- Stars: 31
- Watchers: 4
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - rebez
README
[![Build Status](https://dev.azure.com/javierchavarri/javier_chavarri/_apis/build/status/jchavarri.rebez?branchName=master)](https://dev.azure.com/javierchavarri/javier_chavarri/_build/latest?definitionId=1&branchName=master)
# rebez
Cubic bezier implementation in Reason / OCaml.
Adapted from the JavaScript version in https://github.com/gre/bezier-easing.
BezierEasing provides Cubic Bezier Curve easing which generalizes easing functions (ease-in, ease-out, ease-in-out, etc) exactly like in CSS Transitions.
Implementing efficient lookup is not easy because it implies projecting the X coordinate to a Bezier Curve. This micro library uses fast heuristics (involving dichotomic search, newton-raphson, sampling) to focus on performance and precision.
> It is heavily based on implementations available in Firefox and Chrome (for the CSS transition-timing-function property).
## Install
With `esy`, add to your `package.json`:
```json
{
"dependencies": {
"rebez": "*",
},
"resolutions": {
"rebez": "github:jchavarri/rebez",
},
}
```## Using
In Reason:
```reason
let easing = Rebez.make(0., 0.99, 0., 0.99);
// `easing` is a function that can receive values from 0.0 to 1.0
let value = easing(0.01); // 0.512011914581
```In OCaml:
```ocaml
let easing = Rebez.make 0. 0.99 0. 0.99
(* `easing` is a function that can receive values from 0.0 to 1.0 *)
let value = easing 0.01 (* 0.512011914581 *)
```## Developing:
```
npm install -g esy
git clone https://github.com/jchavarri/rebez/
esy install
esy build
```## Running Tests:
```
# Runs the "test" command in `package.json`.
esy test
```