Skip to main content

Hanzo's fork of PyTweening - A collection of tweening (aka easing) functions.

Project description

PyTweening

A collection of tweening (aka easing) functions implemented in Python. You can learn more about it in this blog post: https://inventwithpython.com/blog/2024/02/20/make-lively-movement-animation-with-pytweenings-tweening-functions/ and in the Nordic Game Jam talk by Martin Jonasson and Petri Purho at https://youtu.be/Fy0aCDmgnxg?si=8pgITaxjJSKFyBuB&t=159

Example Usage

All tweening functions are passed an argument of a float from 0.0 (the beginning of the path) to 1.0 (the end of the path) of the tween:

>>> pytweening.linear(0.5)
0.5
>>> pytweening.linear(0.75)
0.75
>>> pytweening.linear(1.0)
1.0
>>> pytweening.easeInQuad(0.5)
0.25
>>> pytweening.easeInQuad(0.75)
0.5625
>>> pytweening.easeInQuad(1.0)
1.0
>>> pytweening.easeInOutSine(0.75)
0.8535533905932737
>>> pytweening.easeInOutSine(1.0)
1.0

The getLine() function also provides a Bresenham line algorithm implementation:

>>> pytweening.getLine(0, 0, 5, 10)
[(0, 0), (0, 1), (1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (3, 7), (4, 8), (4, 9), (5, 10)]

The getLinePoint() function finds (interpolates) a point on the given line (even if it extends before or past the start or end points):

>>> getLinePoint(0, 0, 5, 10, 0.0)
(0.0, 0.0)
>>> getLinePoint(0, 0, 5, 10, 0.25)
(1.25, 2.5)
>>> getLinePoint(0, 0, 5, 10, 0.5)
(2.5, 5.0)
>>> getLinePoint(0, 0, 5, 10, 0.75)
(3.75, 7.5)
>>> getLinePoint(0, 0, 5, 10, 1.0)
(5.0, 10.0)

PyTweening also provides iterators to get the XY coordinates in a for loop between two points (though some floating-point rounding errors naturally occur):

>>> import pytweening
>>> for x, y in pytweening.iterLinear(0, 0, 100, 150, 0.1): print(x, y)
...
0.0 0.0
10.0 15.0
20.0 30.0
30.000000000000004 45.00000000000001
40.0 60.0
50.0 75.0
60.0 90.0
70.0 105.0
80.0 119.99999999999999
89.99999999999999 135.0
100.0 150.0
>>> for x, y in pytweening.iterEaseOutQuad(0, 0, 100, 150, 0.1): print(x, y)
...
0.0 0.0
19.0 28.5
36.00000000000001 54.00000000000001
51.0 76.5
64.00000000000001 96.00000000000001
75.0 112.5
84.0 126.0
90.99999999999999 136.5
96.00000000000001 144.0
99.0 148.5
100.0 150.0

Tweens

pytweening.linear()

pytweening.linear()

pytweening.easeInQuad()

pytweening.easeInQuad()

pytweening.easeOutQuad()

pytweening.easeOutQuad()

pytweening.easeInOutQuad()

pytweening.easeInOutQuad()

pytweening.easeInCubic()

pytweening.easeInCubic()

pytweening.easeOutCubic()

pytweening.easeOutCubic()

pytweening.easeInOutCubic()

pytweening.easeInOutCubic()

pytweening.easeInQuart()

pytweening.easeInQuart()

pytweening.easeOutQuart()

pytweening.easeOutQuart()

pytweening.easeInOutQuart()

pytweening.easeInOutQuart()

pytweening.easeInQuint()

pytweening.easeInQuint()

pytweening.easeOutQuint()

pytweening.easeOutQuint()

pytweening.easeInOutQuint()

pytweening.easeInOutQuint()

pytweening.easeInSine()

pytweening.easeInSine()

pytweening.easeOutSine()

pytweening.easeOutSine()

pytweening.easeInOutSine()

pytweening.easeInOutSine()

pytweening.easeInExpo()

pytweening.easeInExpo()

pytweening.easeOutExpo()

pytweening.easeOutExpo()

pytweening.easeInOutExpo()

pytweening.easeInOutExpo()

pytweening.easeInCirc()

pytweening.easeInCirc()

pytweening.easeOutCirc()

pytweening.easeOutCirc()

pytweening.easeInOutCirc()

pytweening.easeInOutCirc()

pytweening.easeInElastic()

pytweening.easeInElastic()

pytweening.easeOutElastic()

pytweening.easeOutElastic()

pytweening.easeInOutElastic()

pytweening.easeInOutElastic()

pytweening.easeInBack()

pytweening.easeInBack()

pytweening.easeOutBack()

pytweening.easeOutBack()

pytweening.easeInOutBack()

pytweening.easeInOutBack()

pytweening.easeInBounce()

pytweening.easeInBounce()

pytweening.easeOutBounce()

pytweening.easeOutBounce()

pytweening.easeInOutBounce()

pytweening.easeInOutBounce()

pytweening.easeInPoly() (default degree of 2)

pytweening.easeInPoly()

pytweening.easeOutPoly() (default degree of 2)

pytweening.easeOutPoly()

pytweening.easeInOutPoly() (default degree of 2)

pytweening.easeInOutPoly()

Support

If you find this project helpful and would like to support its development, consider donating to its creator on Patreon.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hanzo_pytweening-1.2.0.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hanzo_pytweening-1.2.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file hanzo_pytweening-1.2.0.tar.gz.

File metadata

  • Download URL: hanzo_pytweening-1.2.0.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.20

File hashes

Hashes for hanzo_pytweening-1.2.0.tar.gz
Algorithm Hash digest
SHA256 2481221841983677c2eb6cec15a99dc97fae9b6ada3951e3b56503a59d6c8dfd
MD5 2fdec048e0d81d9ab89f7df144a66fb4
BLAKE2b-256 e9e137ebbdf7ce0cf1147b792729a91389aacd750212d918dae41e287c39c835

See more details on using hashes here.

File details

Details for the file hanzo_pytweening-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hanzo_pytweening-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 214dd7581e3e5e2c1905cf8cd5d78ec74a02e3de69c55eb6f67a833ff0ccbe29
MD5 a86c4c56e7a9ac15e4c1b65b7feb0c68
BLAKE2b-256 85d09242be550762667defa859884ed16d2f4d62c39f330c587b491794c76f29

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page