HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Parables

09-07-2009, 09:40 PM#1
Idontneedaname
Parabels – how to?

Because I saw lots of threads about this question, I wrote this little tutorial about the parabolic formula of a jump.

You have to know that there is not only one formula, but quite a lot of them – depending on the given parameters you put in.
You could define a parable by a maximum height, the height difference between target location and start location and a given jump-time.
But I think that this solution is not realistic. If some guy jumps even the shortest distance in 2 seconds, but also needs 2 seconds from one end of the map to another, it would be weird.
I prefer instead to take the movement speed of the jumping unit, from which you can calculate the complete parable.
This way, that's the data we can use:
1. Movement speed
2. Height difference
3. 2D-Distance (just like on a map: two points connected with a lineal, no height difference included)

Paid attention in Physics? The formula for the vertical throw is this one:

y(t) = -0.5 * 9.81m/s² * t² + v * t

We have two unknown parameters here: t and v
The first one is easy if you look at this picture:

Click image for larger version

Name:	Parabel.jpg
Views:	41
Size:	18.0 KB
ID:	45510

(yeah it's paint)

The unit will move in x-direction as it did before. With its normal movement speed. Which means that the jumping time is:
t = Distance/MovementSpeed

v (which is the ascending arrow) is the last unknown. We take our formula and transform it a bit:

y(t) = - 0.5 * 9.81m/s² * t² + v * t becomes
v = ( y(t) + 0.5 * 9.81m/s² * t² ) / t

We know that the unit will have a higher position at the end of the jump. y(t) is nothing but height at time t, so we can replace the y(t) by the height difference:

v = ( HeightDifference + 0.5 * 9.81m/s² * t² ) / t

Calculate v and put it into the old formula.

In the trigger, make sure that the unit keeps it movement speed:
Polar Offset by (Default ms of unit) * periodic time
and
set height to -0.5 * 9.81m/s² * t² + v * t – (Z of temporal position of unit – Z of startposition of unit)
Remember, it's height at time t, so the t here is NOT the time the units needs for the complete jump, it is the time the unit is already in the air.
The last one for providing a smooth jump, it would act strange over cliffs otherwise.

Note: 9.81m/s² is far too low for warcraft usage. There is nobody who would jump 700 metres or so. I am using 981m/s².
Note2: This will also work if the unit jumps down from a higher level.

I have added a example map which leaks and is not smooth over cliffs. It does, though, show the formula in action (Download). Enjoy!

Have a nice day!
-Idontneedaname
Attached Images
File type: jpgParabel.jpg (18.0 KB)