Example: Analyze Jump EFH¶
The following page describes how to analyze an existing or hypothetical ski
jump landing surface by calculating it’s equivalent fall height using the
skijumpdesign
API. Make sure to install the
library first.
Load Data¶
Start by loading data of a ski jump surface’s horizontal and vertical
coordinates measured in meters. The resulting surface can be visualized with
the plot()
method. Create a tuple for the
takeoff point coordinates, and a variable for the takeoff angle. Data for this
example is taken from a jump measured with a level and tape measure and
translated into horizontal (x) and vertical (y) components. The sample surface
below was collected from a real slope and jump.
from skijumpdesign import Surface
import numpy as np
takeoff_ang = 10 # degrees
takeoff_point = (0, 0) # meters
x_ft = [-232.3,-203.7,-175.0,-146.3,-117.0,-107.4,-97.7,-88.0,-78.2,
-68.5,-58.8,-49.1,-39.4,-34.5,-29.7,-24.8,-19.8,-17.8,-15.8,
-13.8,-11.8,-9.8,-7.8,-5.9,-3.9,-2.0,0.0,0.0,0.0,2.0,3.9,5.9,
7.9,9.9,11.9,13.9,15.9,17.9,19.9,21.9,23.9,25.8,27.8,29.7,
31.5,33.4,35.2, 37.0,38.8,43.3,47.8,52.3,56.8,61.5,66.2,70.9,
75.7,80.6,85.5,88.4,88.4] # feet
y_ft = [55.5,46.4,37.7,29.1,22.2,19.7,17.2,14.8,12.5,10.2,7.7,5.2,
2.9,1.8,0.7,-0.2,-1.0,-1.2,-1.4,-1.6,-1.7,-1.6,-1.5,-1.3,
-1.0,-0.4,0.0,0.0,0.0,-0.3,-0.8,-1.0,-1.4,-1.4,-1.5,-1.5,-1.5,
-1.5,-1.6,-1.8,-2.0,-2.4,-2.9,-3.5,-4.2,-5.0,-5.8,-6.7,-7.5,
-9.8,-12.0,-14.2,-16.2,-18.1,-19.8,-21.4,-22.9,-24.0,-25.0,
-25.6,-25.6] # feet
x = np.asarray(x_ft)*0.3048 # convert to meters
y = np.asarray(y_ft)*0.3048 # convert to meters
measured_surf = Surface(x, y)
measured_surf.plot()
(Source code, png, hires.png, pdf)
Now that a surface has been created, a skier can be created. The skier can
“ski” along the surface by extracting the data in the array before takeoff and
using the slide_on()
method which generates a
skiing simulation trajectory.
from skijumpdesign import Skier
x_beforetakeoff = x[x<=takeoff_point[0]]
y_beforetakeoff = y[x<=takeoff_point[0]]
before_takeoff = Surface(x_beforetakeoff, y_beforetakeoff)
skier = Skier()
beforetakeoff_traj = skier.slide_on(before_takeoff)
beforetakeoff_traj.plot_time_series()
Flight¶
Once the skier leaves the takeoff ramp at the maximum (design) speed they will
be in flight. The fly_to()
method can be used
to simulate this longest flight trajectory.
takeoff_vel = skier.end_vel_on(before_takeoff)
flight = skier.fly_to(measured_surf, init_pos=before_takeoff.end,
init_vel=takeoff_vel)
flight.plot_time_series()
The design speed flight trajectory can be plotted in addition to the surface.
ax = measured_surf.plot()
flight.plot(ax=ax, color='#9467bd')
(Source code, png, hires.png, pdf)
Calculate Equivalent Fall Height¶
The equivalent fall height of the landing surface is calculated at constant intervals relative to the provided takeoff point or start of the surface.
dist, efh, speeds = measured_surf.calculate_efh(
np.deg2rad(takeoff_ang), takeoff_point,skier, increment=1.0)
There is a convenience function for plotting the calculated efh.
from skijumpdesign.functions import plot_efh
plot_efh(measured_surf, takeoff_ang, takeoff_point, skier=skier,
increment=1.0)
(Source code, png, hires.png, pdf)