2017-02-17 11:35:50 +13:00
|
|
|
# Ease
|
|
|
|
|
2024-02-14 13:21:09 +13:00
|
|
|
[![Build Status](https://drone.harton.dev/api/badges/james/ease/status.svg?ref=refs/heads/main)](https://drone.harton.dev/james/ease)
|
2023-01-17 11:13:07 +13:00
|
|
|
[![Hex.pm](https://img.shields.io/hexpm/v/ease.svg)](https://hex.pm/packages/ease)
|
|
|
|
[![Hippocratic License HL3-FULL](https://img.shields.io/static/v1?label=Hippocratic%20License&message=HL3-FULL&labelColor=5e2751&color=bc8c3d)](https://firstdonoharm.dev/version/3/0/full.html)
|
|
|
|
|
2017-02-17 11:35:50 +13:00
|
|
|
A generic implementation of standard easing functions for use in animation or
|
|
|
|
robotics.
|
|
|
|
|
|
|
|
For examples of "standard" easing algorithms (in this case used in CSS
|
|
|
|
animations) take a look at [easings.net](http://easings.net)
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2024-02-23 09:56:20 +13:00
|
|
|
Ease is [available in Hex](https://hex.pm/packages/ease), the package can be installed
|
2017-02-17 11:35:50 +13:00
|
|
|
by adding `ease` to your list of dependencies in `mix.exs`:
|
|
|
|
|
|
|
|
```elixir
|
|
|
|
def deps do
|
2024-02-23 09:56:20 +13:00
|
|
|
[
|
2024-02-23 09:57:32 +13:00
|
|
|
{:ease, "~> 1.0.1"}
|
2024-02-23 09:56:20 +13:00
|
|
|
]
|
2017-02-17 11:35:50 +13:00
|
|
|
end
|
|
|
|
```
|
|
|
|
|
2024-02-23 09:56:20 +13:00
|
|
|
Documentation for the latest release can be found on
|
|
|
|
[HexDocs](https://hexdocs.pm/ease) and for the `main` branch on
|
|
|
|
[docs.harton.nz](https://docs.harton.nz/james/ease).
|
2017-02-17 11:35:50 +13:00
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
You can use an easing function directly from within your own loop, provided
|
|
|
|
that you can supply the four arguments needed;
|
|
|
|
|
2024-02-14 13:21:09 +13:00
|
|
|
- `current_time` - the elapsed "time" in the loop, ie if your `duration` is
|
2017-02-17 11:35:50 +13:00
|
|
|
ten, and you want to find the position for half way through the duration
|
|
|
|
then you set it to `5`. Units are arbitrary (steps, ms, whatever).
|
2024-02-14 13:21:09 +13:00
|
|
|
- `start_value` - the initial value or position at `current_time` of zero.
|
|
|
|
- `change_in_value`- how much the `start_value` should be changed by the end
|
|
|
|
of the animation, ie the expected final value minus the `start_value`.
|
|
|
|
- `duration` - the duration of the animation, in the same units as `current_time`.
|
2017-02-17 11:35:50 +13:00
|
|
|
|
|
|
|
Given a quadratic ease-in of `1..10`, over 1 unit of time, where would we be
|
|
|
|
when half-way through:
|
|
|
|
|
|
|
|
iex> Ease.ease_in_quad(0.5, 1, 10, 1)
|
|
|
|
3.25
|
|
|
|
|
|
|
|
Plot the `{x, y}` positions for a circular ease-in:
|
|
|
|
|
|
|
|
iex> ys = 1..10
|
|
|
|
...> xs = Ease.map(ys, :ease_in_circular)
|
|
|
|
...> Enum.zip(xs, ys)
|
|
|
|
[{1.0, 1}, {1.0557280900008417, 2}, {1.2250356126078779, 3},
|
|
|
|
{1.5147186257614298, 4}, {1.9377422517014504, 5}, {2.5166852264521173, 6},
|
|
|
|
{3.291796067500631, 7}, {4.34314575050762, 8}, {5.876894374382339, 9},
|
|
|
|
{10.0, 10}]
|
|
|
|
|
2024-02-14 13:21:09 +13:00
|
|
|
## Github Mirror
|
|
|
|
|
|
|
|
This repository is mirrored [on Github](https://github.com/jimsynz/ease)
|
2024-03-08 14:44:27 +13:00
|
|
|
from it's primary location [on my Forgejo instance](https://harton.dev/james/ease).
|
2024-02-14 13:21:09 +13:00
|
|
|
Feel free to raise issues and open PRs on Github.
|
|
|
|
|
2023-01-17 11:13:07 +13:00
|
|
|
## License
|
|
|
|
|
|
|
|
This software is licensed under the terms of the
|
|
|
|
[HL3-FULL](https://firstdonoharm.dev), see the `LICENSE.md` file included with
|
|
|
|
this package for the terms.
|
2017-02-17 11:35:50 +13:00
|
|
|
|
2023-01-17 11:13:07 +13:00
|
|
|
This license actively proscribes this software being used by and for some
|
2024-02-14 13:21:09 +13:00
|
|
|
industries, countries and activities. If your usage of this software doesn't
|
2023-01-17 11:13:07 +13:00
|
|
|
comply with the terms of this license, then [contact me](mailto:james@harton.nz)
|
|
|
|
with the details of your use-case to organise the purchase of a license - the
|
|
|
|
cost of which may include a donation to a suitable charity or NGO.
|