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)

_images/analyze-jump-1.png

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()

(Source code)

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()

(Source code)

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)

_images/analyze-jump-4.png

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)

(Source code)

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)

_images/analyze-jump-6.png