Skip to main content

Implementation of physical models for flying sport discs.

Project description

License Last Commit Coverage Tests PyPI PyPI PyPI

🥏 Flying Discs

This Python repository contains modules and algorithms that can calculate trajectories of flying sports discs. The repository includes non-physical and physical model based algorithms and parameterizations for calculating the trajectories.

🤔 Why create this project?

This project can be used by researchers, sports enthusiasts, and anyone interested in studying or improving the performance of flying sports discs. The open-source nature of this project also allows for contributions and enhancements by the community, further improving its capabilities and usefulness.

🔬 Included disc models

S. Hummel, "Frisbee Flight Simulation and Throw Biomechanics" University of California, Davis, 2003.

The base model for calculation of a flying discs trajectory. The model was researched by L.Hannah in [L. Hannah, Constraining Frisbee Tracking Methods Through Bayesian Analysis of Flying Disc Models 2017.] She and her initiator T. McClintock initial published the code in the repository Frisbee_Simulator. Recently this was re-written in a Python library FrisPy. The library solves the models ODE, allowing for increased parameterizations and precision.

As the FrisPy library is not actively maintained this repository includes refactored code under flying_discs.frispy.scipy_backend and tests. Kudos to T. McClintock(https://www.linkedin.com/in/t-mcclintock) for his work on the FrisPy library.

I added a faster version by adopting the ODE FrisPy library using JAX as solving backend. Found in flying_discs.frispy.jax_backend. A comparison notebook can be found under notebooks.

V. Morrison, “The physics of frisbees” Mount Allison University Physics Department, vol. 1, 2005.

The Morrison model is a Euler approximation of S. A. Hummel, Frisbee Flight Simulation and Throw Biomechanics. University of California, Davis, 2003. using constants.

Constants
  • G. Stilley and D. Carstens, “Adaptation of the Frisbee flight principle to delivery of special ordnance,” in 2nd Atmospheric Flight Mechanics Conference, in Guidance, Navigation, and Control and Co-located Conferences. American Institute of Aeronautics and Astronautics, 1972. doi: 10.2514/6.1972-982.
  • K. Yasuda, “Flight and aerodynamic characteristics of a flying disk,” Japanese Soc. Aero. Space Sci, vol. 47, no. 547, pp. 16–22, 1999.
  • S. A. Hummel, Frisbee Flight Simulation and Throw Biomechanics. University of California, Davis, 2003.
  • V. Morrison, “The physics of frisbees” Mount Allison University Physics Department, vol. 1, 2005.
  • W. J. Crowther and J. R. Potts, “Simulation of a spin-stabilised sports disc,” Sports Engineering, vol. 10, no. 1, pp. 3–21, 2007.
  • L. Hannah, “Constraining Frisbee Tracking Methods Through Bayesian Analysis of Flying Disc Models,” 2017.

🚀 Get Started

Installation

pip3 install flying-discs

👩‍🏫 Example

Jupyter notebooks can be found under notebooks.

Morrison Example

from flying_discs.morrison.constants import MorrisonUltrastar
from flying_discs.morrison.coordinates import MorrisonPosition3D
from flying_discs.morrison.linear import MorrisonLinearCalculator

disc = MorrisonLinearCalculator(MorrisonUltrastar())

Z0 = 1
TIMESCALE = 0.033
ANGLE_OF_ATTACK = 5
V0 = 14
DIRECTION_ANGLE = 0

throw = disc.calculate_trajectory(
    MorrisonPosition3D(z=Z0),
    V0,
    ANGLE_OF_ATTACK,
    DIRECTION_ANGLE,
    TIMESCALE,
)

📃 Documentation

Some doc-strings are already added. Documentation is a work-in-progress and will be updated on a time by time basis.

💃🕺 Contribution

I welcome everybody contributing to this project. Please read the CONTRIBUTING.md for more information. Feel free to open an issue on the project if you have any further questions.

💻 Development

The repository provides tools for development using hatch. hatch manages dev tools for all compatible Python versions.

Standard development Python version is Python 3.10 for now. All dependencies for to develop in the project can be found in a requirements-file.

Install the development dependencies.

pip3 install -r requirements/dev.txt

or

pip3 install "flying-discs[dev]"

Tools

To run all development tools, type checking, linting and tests hatch is required.

make all

Type checking

Type checking with mypy.

make mypy

Linting

Linting with pylint.

make lint

Tests

Run tests with pytest.

make test

Update dependencies

Update python requirements with pip-compile.

make update

🧾 License

This repository is licensed under the GNU Lesser General Public License v3.0. See the LICENSE file for more information.

Please note that while the LGPLv3 allows for the use of the code in proprietary software projects, any modifications to the code must also be released under the LGPLv3.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flying_discs-0.6.0a0.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flying_discs-0.6.0a0-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file flying_discs-0.6.0a0.tar.gz.

File metadata

  • Download URL: flying_discs-0.6.0a0.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.5 cpython/3.10.20 HTTPX/0.28.1

File hashes

Hashes for flying_discs-0.6.0a0.tar.gz
Algorithm Hash digest
SHA256 61379a07fa08d2d473d307f06a7d908ab5dd0e2396c6eb31046891595da19d9c
MD5 1b36d8a8620b7cbd34da119980d0deb3
BLAKE2b-256 e5e8d49860f1eb073b3e829c06afa5c5032faba15050c39de63dac853765456c

See more details on using hashes here.

File details

Details for the file flying_discs-0.6.0a0-py3-none-any.whl.

File metadata

  • Download URL: flying_discs-0.6.0a0-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.5 cpython/3.10.20 HTTPX/0.28.1

File hashes

Hashes for flying_discs-0.6.0a0-py3-none-any.whl
Algorithm Hash digest
SHA256 b4f68eef85d49dfe2cba14694c785955eed31aba2267950e78a669e5894c052f
MD5 633de5c6b7cf8f3399dd56da8da9854e
BLAKE2b-256 7123a6c122c0f7c824f9a5f7625963ec060f859aead09c5c17228d1867a302bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page