While working on the physics engine for TIM (see below), I had to come up with an elasticity model. I usually just use a number for each material, and multiply them together to get the collision elasticity (percentage of kinetic energy not absorbed).
But then I thought about three characteristic materials elasticity-wise: A marble tile, a soft gym mat, and a super ball. A single number won’t do here, since the following relations hold (using × to denote said operation):
tile × tile = 0 mat × mat = 0 ball × tile = 1 ball × mat = 0
If you can think of numbers and an operation × that have those properties, please comment. I’m quite certain that no such thing exists (without evil encoding of numbers and such; it has to be somewhat elegant).
But I did come up with a system that worked, and it naturally comes from the most practical branch of mathematics I’ve ever had the pleasure of studying: Linear Algebra. Each material is characterized by a tuple, <hardness elasticity>, both between 0 and 1. These are then run through a nice formula (materials α and β):
αT·E·β with: E = [ 0 1 ] [ 1 1 ]
If you run a few test cases, you’ll find that this gives the expected results many, many times. If you can find a counter-case, please comment and tell me.