8000 GitHub - asweigart/pytweening: A set of tweening / easing functions implemented in Python.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

asweigart/pytweening

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

A set of tweening / easing functions implemented in Python.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0