Here’s a tween.easing graph plotter, so you can compare all the easing types.

I made it to help me write new easing types
(The background to this is I’m working on a 3D game, and needed some quick and fake physics for something falling and bouncing off the ground. cubicIn is good for the start of the fall, bounceOut for the end, but no way of combining them, hence the attempt here at a hybrid tween.easing.cubicInBounceOut easing type. Unfortunately cubic and bounce don’t quite meet in the middle (as you can see in the centre of the image above), so a bit of a cludge was needed to paper over the crack… not sure if it’s quite fit for purpose. Improvements welcome!)
--# Main
supportedOrientations(PORTRAIT)
displayMode(OVERLAY)
function setup()
fontSize(30)
font("Vegur")
parameter.number("plotSpeed", 0.5,5,3)
parameter.action("ALL", function() tween.plot.setup(plotSpeed, 0) end)
parameter.action("In", function() tween.plot.setup(plotSpeed, 1) end)
parameter.action("Out", function() tween.plot.setup(plotSpeed, 2) end)
parameter.action("InOut", function() tween.plot.setup(plotSpeed, 3) end)
tween.plot.setup(plotSpeed, 0)
end
function draw()
background(0)
for i,v in ipairs(graphs) do
v:draw()
end
end
--# TweenPlot
tween.plot = class()
local colors={color(0,255,0), color(255,0,0),color(255,255,0),} --colors for in, out, inOut
function tween.plot:init(pos, size, speed, plot, graph, curves)
self.pos=pos --position of table
self.size=size --size of table
self.title=graph --title of graph
self.speed=speed --how quickly it plots
self.plot=plot --offset for choosing plot colour
self.curves={} --tables to hold each curve
for i,v in ipairs(curves) do
self.curves[i]={}
self.curves[i].value=0 --the value being plotted
self.curves[i].results={} --store the results frame-by-frame
self.curves[i].tween=tween(speed, self.curves[i], {value=1}, tween.easing[v])
end
end
function tween.plot:draw()
pushMatrix()
translate(self.pos.x,self.pos.y)
stroke(128)
strokeWidth(1)
--axis
line(0,0,self.size,0)
line(0,0,0,self.size)
noStroke()
--title
fill(128)
text(self.title,self.size*0.5,self.size*0.5)
local plot=self.plot
if plot>0 then plot = plot - 1 end --colour to use
for a,curve in ipairs(self.curves) do
if curve.tween.running0 and plot<=#curves then
curves={curves[plot]} --just draw one curve
end
table.insert(graphs, tween.plot(pos, size-gutter, speed, plot, graph, curves))
y = y + 1
if y==grid.y then
y = 0
x = x + 1
if x==grid.x then return end
end
end
end
local function outBounce(t, b, c, d)
t = t / d
if t < 1 / 2.75 then return c * (7.5625 * t * t) + b end
if t < 2 / 2.75 then
t = t - (1.5 / 2.75)
return c * (7.5625 * t * t + 0.75) + b
elseif t < 2.5 / 2.75 then
t = t - (2.25 / 2.75)
return c * (7.5625 * t * t + 0.9375) + b
end
t = t - (2.625 / 2.75)
return c * (7.5625 * t * t + 0.984375) + b
end
function tween.easing.cubicInBounceOut(t, b, c, d)
local tc = t / d * 2
if t < d / 2 then return c / 2 * tc * tc * tc + b end
return outBounce(t*2.15-d,0,c,d*1.08) * 0.5 + c * .5 + b
end
```