Files
mp-units/docs/examples/glide_computer.rst
T

58 lines
2.4 KiB
ReStructuredText
Raw Normal View History

2020-09-08 18:40:46 +02:00
.. namespace:: units
2020-06-22 19:43:06 +02:00
glide_computer
==============
This example presents the usage of:
2021-01-04 18:36:26 -04:00
- different kinds for length, time, and velocity,
- quantities text output formatting,
2021-01-04 18:36:26 -04:00
- the use of quantity kinds to show how to handle 3D space for aviation needs,
- `quantity_point_kind` to mark "absolute" values like ``altitude`` (as opposed to ``height``).
2021-01-04 18:36:26 -04:00
The use of `quantity_kind` and `quantity_point_kind` provide strong typing
that divide quantities and quantity points to the ones on a horizontal (X, Y) plane and vertical (Z) axis.
Their purpose is to make different kinds of quantity
(i.e. length) separate strong types (i.e. distance, height).
Additionally, separating a quantity from its quantity point
means that we can define a ``height`` and ``altitude`` as different strong types.
A quantity point provides a more restricted interface meant for absolute calculations.
2020-06-22 19:43:06 +02:00
.. literalinclude:: ../../example/glide_computer.cpp
2020-06-25 17:44:51 +02:00
:caption: glide_computer.cpp
2020-06-22 19:43:06 +02:00
:start-at: #include
:end-before: // custom types
2020-06-22 19:43:06 +02:00
:linenos:
:lineno-match:
The next part of the example defines strong types used by the glide calculator engine. For example
we have 3 :term:`kinds of quantities <kind>` for a quantity of length:
- ``distance`` - a relative horizontal distance between 2 points on Earth
- ``height`` - a relative altitude difference between 2 points in the air
- ``altitude`` - an absolute altitude value measured form the mean sea level (AMSL).
For the last case a custom text output is provided both for C++ output streams and the text formatting
facility.
.. literalinclude:: ../../example/glide_computer.cpp
2020-06-25 17:44:51 +02:00
:caption: glide_computer.cpp
:start-at: // custom types
:end-before: // An example of a really
:linenos:
:lineno-match:
The engine of this simple glide computer works on quantities of the SI units with a floating-point
representation. The user can pass any unit valid for a given quantity and the library will automatically
convert it to the one required by the engine interface.
The glide calculator estimates the number of flight phases (towing, circling, gliding, final glide) needed
to finish a task and the duration needed to finish it while flying a selected glider in the specific weather
conditions.
.. literalinclude:: ../../example/glide_computer.cpp
2020-06-25 17:44:51 +02:00
:caption: glide_computer.cpp
:start-at: // An example of a really simplified tactical glide computer
:linenos:
:lineno-match: