File size: 1,352 Bytes
aa651cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# -*- coding: utf-8 -*-
"""
This program calculates the trajectory of a spinning soccer ball
that was experimentally investigated in

Mencke, J. E., Salewski, M., Trinhammer, O. L., & Adler, A. T. (2020). 
Flight and bounce of spinning sports balls. American Journal of Physics, 
88(11), 934-947.

"""

from shotshaper.projectile import SoccerBall
import matplotlib.pyplot as pl
import numpy as np
from scipy.linalg import norm

ball = SoccerBall()
u = np.array([20.0, 2.5, 4.9])
# Note that spin is here negative along the z-axis, as opposed
# to positive around the y-axis, since we define z as upwards,
# while Mencke et al. define y as upwards 
spin = (0,0,-46) 
speed = norm(u)
pitch = np.degrees(np.arctan2(u[2],u[0]))
yaw = -np.degrees(np.arctan2(u[1],u[0]))
    
s = ball.shoot(speed=speed,pitch=pitch,yaw=yaw,spin=spin)

x,y,z = s.position

f, (ax1, ax2) = pl.subplots(2, 1, figsize=(5,7))

ax1.plot(x,z,'C0-')
ax2.plot(x,y,'C0-')    
x,z = np.loadtxt('data/Spin_z_trajectory.dat', unpack=True, delimiter=';')
ax1.plot(x,z,'C1--')
x,y = np.loadtxt('data/Spin_y_trajectory.dat', unpack=True, delimiter=';')
ax2.plot(x,y,'C1--')    

ax1.legend(('Simulation','Experiment'))
ax2.legend(('Simulation','Experiment'))
    
ax1.set_xlabel('Length (m)')
ax1.set_ylabel('Height (m)')
ax2.set_xlabel('Length (m)')
ax2.set_ylabel('Drift (m)')

pl.show()