2020-09-08 18:40:46 +02:00
|
|
|
.. namespace:: units
|
|
|
|
|
|
2020-06-22 19:43:06 +02:00
|
|
|
glide_computer
|
|
|
|
|
==============
|
|
|
|
|
|
2020-06-22 21:35:24 +02:00
|
|
|
This example presents the usage of:
|
|
|
|
|
|
|
|
|
|
- different units for length, time, and velocity,
|
|
|
|
|
- quantities text output formatting,
|
|
|
|
|
- `quantity_point` to mark "absolute" values like ``altitude`` (as opposed to ``height``),
|
|
|
|
|
- a simple ``vector`` class to show how to handle 3D space for aviation needs and how to build abstractions
|
|
|
|
|
on top of a `Quantity` concept.
|
|
|
|
|
|
|
|
|
|
``vector`` class template provides a strong type that divides quantities and quantity points to the ones
|
|
|
|
|
on a horizontal (X, Y) plane and vertical (Z) axis. Its purpose is to make different kinds of quantity
|
|
|
|
|
(i.e. length) separated strong types (i.e. distance, height). Additionally, it wraps both a `quantity`
|
|
|
|
|
and `quantity_point` types which means that we can define a ``height`` and ``altitude`` respectively
|
|
|
|
|
as different strong types. Some of its function are defined only for quantities (additional operators)
|
|
|
|
|
and some for quantity points (additional constructor).
|
|
|
|
|
|
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
|
2020-06-22 21:35:24 +02:00
|
|
|
:end-before: // custom types
|
|
|
|
|
: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
|
2020-06-22 21:35:24 +02:00
|
|
|
: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
|
2020-06-22 21:35:24 +02:00
|
|
|
:start-at: // An example of a really simplified tactical glide computer
|
2020-06-22 19:43:06 +02:00
|
|
|
:linenos:
|
2020-06-22 21:35:24 +02:00
|
|
|
:lineno-match:
|