diff --git a/CMakeLists.txt b/CMakeLists.txt index f21927c..ec249c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,6 @@ find_package(Qt5 COMPONENTS Core Network REQUIRED) add_subdirectory(src/myx/base) add_subdirectory(src/myx/filesystem) add_subdirectory(src/myx/qt) -add_subdirectory(src/myx/math) # Примеры if(MYXLIB_BUILD_EXAMPLES OR MYXLIB_BUILD_EXAMPLES_HO) diff --git a/src/myx/math/CMakeLists.txt b/src/myx/math/CMakeLists.txt deleted file mode 100644 index 19cac81..0000000 --- a/src/myx/math/CMakeLists.txt +++ /dev/null @@ -1,72 +0,0 @@ -# Название основной цели и имя библиотеки в текущем каталоге -set(TRGT math) - -# cmake-format: off -# Список файлов исходных текстов -set(TRGT_cpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_relative.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_relative_and_abs.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_ulps.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_ulps_and_abs.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/constants.cpp) - -# Список заголовочных файлов -set(TRGT_hpp - ${CMAKE_CURRENT_SOURCE_DIR}/all.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_relative.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_relative_and_abs.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_ulps.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/almost_equal_ulps_and_abs.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/constants.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/float_cmp_types.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/functions.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/radar.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/units.hpp) - -set(TRGT_headers ${TRGT_hpp}) -# cmake-format: on - -add_library(${TRGT}-header-only INTERFACE) -target_sources(${TRGT}-header-only INTERFACE ${TRGT_headers}) -target_include_directories( - ${TRGT}-header-only SYSTEM INTERFACE "$" - "$") - -if(MYXLIB_BUILD_LIBRARIES) - - add_common_library(${TRGT} OUTPUT_NAME myx-${TRGT} SOURCES ${TRGT_cpp} ${TRGT_headers}) - common_target_properties(${TRGT}) - - # Создание цели для проверки утилитой clang-tidy - add_clang_tidy_check(${TRGT} ${TRGT_sources} ${TRGT_headers}) - - # Создание цели для проверки утилитой clang-analyze - add_clang_analyze_check(${TRGT} ${TRGT_sources} ${TRGT_headers}) - - # Создание цели для проверки утилитой clazy - add_clazy_check(${TRGT} ${TRGT_sources} ${TRGT_headers}) - - # Создание цели для проверки утилитой pvs-studio - add_pvs_check(${TRGT}) - - # Создание цели для автоматического форматирования кода - add_format_sources(${TRGT} ${TRGT_sources} ${TRGT_headers}) - - target_compile_definitions(${TRGT} PUBLIC MYXLIB_BUILD_LIBRARIES) - target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src) - - cotire(${TRGT}) - install(TARGETS ${TRGT}_static COMPONENT libs-dev ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - if(BUILD_SHARED_LIBS) - install(TARGETS ${TRGT}_shared COMPONENT main LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() -else() - install(FILES ${TRGT_cpp} COMPONENT base-dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${TRGT}) -endif() - -generate_pkgconfig(myx-${TRGT} COMPONENT base-dev INSTALL_LIBRARY ${MYXLIB_BUILD_LIBRARIES}) -install(FILES ${TRGT_headers} COMPONENT base-dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${TRGT}) - -# Цель, используемая только для установки заголовочных файлов без компиляции проекта -add_custom_target(${TRGT}-install-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=base -P - "${CMAKE_BINARY_DIR}/cmake_install.cmake") diff --git a/src/myx/math/all.hpp b/src/myx/math/all.hpp deleted file mode 100644 index 061532d..0000000 --- a/src/myx/math/all.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef MYX_MATH_ALL_HPP_ -#define MYX_MATH_ALL_HPP_ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include - -#endif diff --git a/src/myx/math/almost_equal_relative.cpp b/src/myx/math/almost_equal_relative.cpp deleted file mode 100644 index a333b41..0000000 --- a/src/myx/math/almost_equal_relative.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_RELATIVE_CPP_ -#define MYX_MATH_ALMOST_EQUAL_RELATIVE_CPP_ - -#ifndef MYXLIB_HEADER_ONLY -#include -#else -#pragma once -#endif - -#include - -namespace myx { - -namespace math { - -MYXLIB_INLINE bool almost_equal_relative( const float a, const float b, - const float maxRelDiff ) -{ - float diff = fabsf( a - b ); - float aN = fabsf( a ); - float bN = fabsf( b ); - float largest = ( bN > aN ) ? bN : aN; - - if ( diff <= largest * maxRelDiff ) - { - return( true ); - } - return( false ); -} - - -MYXLIB_INLINE bool almost_equal_relative( const double a, const double b, - const double maxRelDiff ) -{ - double diff = fabs( a - b ); - double aN = fabs( a ); - double bN = fabs( b ); - double largest = ( bN > aN ) ? bN : aN; - - if ( diff <= largest * maxRelDiff ) - { - return( true ); - } - return( false ); -} - -} // namespace math - -} // namespace myx - -#endif // ifndef MYX_MATH_ALMOST_EQUAL_RELATIVE_CPP_ diff --git a/src/myx/math/almost_equal_relative.hpp b/src/myx/math/almost_equal_relative.hpp deleted file mode 100644 index 174bf68..0000000 --- a/src/myx/math/almost_equal_relative.hpp +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_RELATIVE_HPP_ -#define MYX_MATH_ALMOST_EQUAL_RELATIVE_HPP_ - -#pragma once - -#include - -#include - -// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - -namespace myx { - -namespace math { - -/** - * @brief Проверка на равенство двух аргументов типа float. - * Параметр maxRelDiff определяет максимальную относительную допустимую разницу, - * при которой аргументы считаются равными. - */ -bool almost_equal_relative( float a, float b, - float maxRelDiff = FLT_EPSILON ); -/** - * @brief Проверка на равенство двух аргументов типа double. - * Параметр maxRelDiff определяет максимальную относительную допустимую разницу, - * при которой аргументы считаются равными. - */ -bool almost_equal_relative( double a, double b, - double maxRelDiff = DBL_EPSILON ); - -} // namespace math - -} // namespace myx - -#ifdef MYXLIB_HEADER_ONLY -#include "almost_equal_relative.cpp" -#endif - -#endif // MYX_MATH_ALMOST_EQUAL_RELATIVE_HPP_ diff --git a/src/myx/math/almost_equal_relative_and_abs.cpp b/src/myx/math/almost_equal_relative_and_abs.cpp deleted file mode 100644 index 7af8bc0..0000000 --- a/src/myx/math/almost_equal_relative_and_abs.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_RELATIVE_AND_ABS_CPP_ -#define MYX_MATH_ALMOST_EQUAL_RELATIVE_AND_ABS_CPP_ - -#ifndef MYXLIB_HEADER_ONLY -#include -#else -#pragma once -#endif - -#include - -namespace myx { - -namespace math { - -MYXLIB_INLINE bool almost_equal_relative_and_abs( const float a, const float b, - const float maxAbsDiff, const float maxRelDiff ) -{ - // Check if the numbers are really close -- needed - // when comparing numbers near zero. - float diff = fabsf( a - b ); - if ( diff <= maxAbsDiff ) - { - return( true ); - } - - float aN = fabsf( a ); - float bN = fabsf( b ); - float largest = ( bN > aN ) ? bN : aN; - - if ( diff <= largest * maxRelDiff ) - { - return( true ); - } - return( false ); -} - - -MYXLIB_INLINE bool almost_equal_relative_and_abs( const double a, const double b, - const double maxAbsDiff, const double maxRelDiff ) -{ - // Check if the numbers are really close -- needed - // when comparing numbers near zero. - double diff = fabs( a - b ); - if ( diff <= maxAbsDiff ) - { - return( true ); - } - - double aN = fabs( a ); - double bN = fabs( b ); - double largest = ( bN > aN ) ? bN : aN; - - if ( diff <= largest * maxRelDiff ) - { - return( true ); - } - return( false ); -} - -} // namespace math - -} // namespace myx - -#endif // ifndef MYX_MATH_ALMOST_EQUAL_RELATIVE_AND_ABS_CPP_ diff --git a/src/myx/math/almost_equal_relative_and_abs.hpp b/src/myx/math/almost_equal_relative_and_abs.hpp deleted file mode 100644 index c414aa0..0000000 --- a/src/myx/math/almost_equal_relative_and_abs.hpp +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_RELATIVE_AND_ABS_HPP_ -#define MYX_MATH_ALMOST_EQUAL_RELATIVE_AND_ABS_HPP_ - -#pragma once - -#include - -#include - -namespace myx { - -namespace math { - -/** - * @brief Проверка на равенство двух аргументов типа float. - * Параметр maxAbsDiff определяет максимальную абсолютную допустимую разницу. - * Параметр maxRelDiff определяет максимальную относительную допустимую разницу, - * при которой аргументы считаются равными. - */ -bool almost_equal_relative_and_abs( float a, float b, - float maxAbsDiff, float maxRelDiff = FLT_EPSILON ); -/** - * @brief Проверка на равенство двух аргументов типа double. - * Параметр maxAbsDiff определяет максимальную абсолютную допустимую разницу. - * Параметр maxRelDiff определяет максимальную относительную допустимую разницу, - * при которой аргументы считаются равными. - */ -bool almost_equal_relative_and_abs( double a, double b, - double maxAbsDiff, double maxRelDiff = DBL_EPSILON ); - -} // namespace math - -} // namespace myx - -#ifdef MYXLIB_HEADER_ONLY -#include "almost_equal_relative_and_abs.cpp" -#endif - -#endif // MYX_MATH_ALMOST_EQUAL_RELATIVE_AND_ABS_HPP_ diff --git a/src/myx/math/almost_equal_ulps.cpp b/src/myx/math/almost_equal_ulps.cpp deleted file mode 100644 index 71313ef..0000000 --- a/src/myx/math/almost_equal_ulps.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_ULPS_CPP_ -#define MYX_MATH_ALMOST_EQUAL_ULPS_CPP_ - -#ifndef MYXLIB_HEADER_ONLY -#include -#else -#pragma once -#endif - -#include - -#include - -namespace myx { - -namespace math { - -MYXLIB_INLINE bool almost_equal_ulps( const float a, const float b, - const int maxUlpsDiff ) -{ - FloatCmp uA( a ); - FloatCmp uB( b ); - - // Если знаки разные, то числа не равны. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - if ( uA.negative() != uB.negative() ) - { - // Кроме случая, когда +0==-0 - #ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wfloat-equal" - #endif - if ( a == b ) // -V550 - #ifdef __GNUC__ - #pragma GCC diagnostic pop - #endif - { - return( true ); - } - return( false ); - } - - // Разница в младших битах. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - auto ulpsDiff = std::abs( uA.i - uB.i ); - if ( ulpsDiff <= maxUlpsDiff ) - { - return( true ); - } - return( false ); -} // almost_equal_ulps - - -MYXLIB_INLINE bool almost_equal_ulps( const double a, const double b, - const int maxUlpsDiff ) -{ - DoubleCmp uA( a ); - DoubleCmp uB( b ); - - // Если знаки разные, то числа не равны. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - if ( uA.negative() != uB.negative() ) - { - // Кроме случая, когда +0==-0 - #ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wfloat-equal" - #endif - if ( a == b ) // -V550 - #ifdef __GNUC__ - #pragma GCC diagnostic pop - #endif - { - return( true ); - } - return( false ); - } - - // Разница в младших битах. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - auto ulpsDiff = std::abs( uA.i - uB.i ); - if ( ulpsDiff <= maxUlpsDiff ) - { - return( true ); - } - return( false ); -} // almost_equal_ulps - -} // namespace math - -} // namespace myx - -#endif // ifndef MYX_MATH_ALMOST_EQUAL_ULPS_CPP_ diff --git a/src/myx/math/almost_equal_ulps.hpp b/src/myx/math/almost_equal_ulps.hpp deleted file mode 100644 index 5da8a62..0000000 --- a/src/myx/math/almost_equal_ulps.hpp +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_ULPS_HPP_ -#define MYX_MATH_ALMOST_EQUAL_ULPS_HPP_ - -#pragma once - -#include -#include - -#include - -namespace myx { - -namespace math { - -/** - * @brief Проверка на равенство двух аргументов типа float. - * Параметр maxUlpsDiff определяет максимальную разницу между аргументами, - * при которой они считаются равными. - */ -bool almost_equal_ulps( float a, float b, - int maxUlpsDiff ); -/** - * @brief Проверка на равенство двух аргументов типа double. - * Параметр maxUlpsDiff определяет максимальную разницу между аргументами, - * при которой они считаются равными. - */ -bool almost_equal_ulps( double a, double b, - int maxUlpsDiff ); - -} // namespace math - -} // namespace myx - -#ifdef MYXLIB_HEADER_ONLY -#include "almost_equal_ulps.cpp" -#endif - -#endif // MYX_MATH_ALMOST_EQUAL_ULPS_HPP_ diff --git a/src/myx/math/almost_equal_ulps_and_abs.cpp b/src/myx/math/almost_equal_ulps_and_abs.cpp deleted file mode 100644 index f56fb6d..0000000 --- a/src/myx/math/almost_equal_ulps_and_abs.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_ULPS_CPP_ -#define MYX_MATH_ALMOST_EQUAL_ULPS_CPP_ - -#ifndef MYXLIB_HEADER_ONLY -#include -#else -#pragma once -#endif - -#include - -#include - -namespace myx { - -namespace math { - -MYXLIB_INLINE bool almost_equal_ulps_and_abs( const float a, const float b, - const float maxAbsDiff, const int maxUlpsDiff ) -{ - // Check if the numbers are really close -- needed - // when comparing numbers near zero. - float absDiff = fabsf( a - b ); - if ( absDiff <= maxAbsDiff ) - { - return( true ); - } - - FloatCmp uA( a ); - FloatCmp uB( b ); - - // Different signs means they do not match. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - if ( uA.negative() != uB.negative() ) - { - return( false ); - } - - // Find the difference in ULPs. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - int ulpsDiff = std::abs( uA.i - uB.i ); - if ( ulpsDiff <= maxUlpsDiff ) - { - return( true ); - } - - return( false ); -} // almost_equal_ulps_and_abs - - -MYXLIB_INLINE bool almost_equal_ulps_and_abs( const double a, const double b, - const double maxAbsDiff, const int maxUlpsDiff ) -{ - // Check if the numbers are really close -- needed - // when comparing numbers near zero. - double absDiff = fabs( a - b ); - if ( absDiff <= maxAbsDiff ) - { - return( true ); - } - - DoubleCmp uA( a ); - DoubleCmp uB( b ); - - // Different signs means they do not match. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - if ( uA.negative() != uB.negative() ) - { - return( false ); - } - - // Find the difference in ULPs. - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) - auto ulpsDiff = std::abs( uA.i - uB.i ); - if ( ulpsDiff <= maxUlpsDiff ) - { - return( true ); - } - - return( false ); -} // almost_equal_ulps_and_abs - -} // namespace math - -} // namespace myx - -#endif // ifndef MYX_MATH_ALMOST_EQUAL_ULPS_CPP_ diff --git a/src/myx/math/almost_equal_ulps_and_abs.hpp b/src/myx/math/almost_equal_ulps_and_abs.hpp deleted file mode 100644 index 31fba64..0000000 --- a/src/myx/math/almost_equal_ulps_and_abs.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef MYX_MATH_ALMOST_EQUAL_ULPS_HPP_ -#define MYX_MATH_ALMOST_EQUAL_ULPS_HPP_ - -#pragma once - -#include - -namespace myx { - -namespace math { - -/** - * @brief Проверка на равенство двух аргументов типа float. - * Параметр maxAbsDiff определяет максимальную абсолютную допустимую разницу. - * Параметр maxUlpsDiff определяет максимальную разницу между аргументами, - * при которой они считаются равными. - */ -bool almost_equal_ulps_and_abs( float a, float b, - float maxAbsDiff, int maxUlpsDiff ); -/** - * @brief Проверка на равенство двух аргументов типа double. - * Параметр maxAbsDiff определяет максимальную абсолютную допустимую разницу. - * Параметр maxUlpsDiff определяет максимальную разницу между аргументами, - * при которой они считаются равными. - */ -bool almost_equal_ulps_and_abs( double a, double b, - double maxAbsDiff, int maxUlpsDiff ); - -} // namespace math - -} // namespace myx - -#ifdef MYXLIB_HEADER_ONLY -#include "almost_equal_ulps_and_abs.cpp" -#endif - -#endif // MYX_MATH_ALMOST_EQUAL_ULPS_HPP_ diff --git a/src/myx/math/constants.cpp b/src/myx/math/constants.cpp deleted file mode 100644 index 0db5a4b..0000000 --- a/src/myx/math/constants.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef MYX_MATH_CONSTANTS_CPP_ -#define MYX_MATH_CONSTANTS_CPP_ - -#ifndef MYXLIB_HEADER_ONLY -#include -#else -#pragma once -#endif - -namespace myx { - -namespace math { - -} // namespace math - -} // namespace myx - -#endif // ifndef MYX_MATH_CONSTANTS_CPP_ diff --git a/src/myx/math/constants.hpp b/src/myx/math/constants.hpp deleted file mode 100644 index fa70a6b..0000000 --- a/src/myx/math/constants.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef MYX_MATH_CONSTANTS_HPP_ -#define MYX_MATH_CONSTANTS_HPP_ - -#pragma once - -#include - -#include -#include - -namespace myx { - -namespace math { - -const auto ImpedanceOfFreeSpace = ( M_PI * 119.9169832 ); - -} // namespace math - -} // namespace myx - -#ifdef MYXLIB_HEADER_ONLY -#include "constants.cpp" -#endif - -#endif // MYX_MATH_CONSTANTS_HPP_ diff --git a/src/myx/math/float_cmp_types.hpp b/src/myx/math/float_cmp_types.hpp deleted file mode 100644 index 0acc1aa..0000000 --- a/src/myx/math/float_cmp_types.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef MYX_MATH_FLOAT_CMP_TYPES_HPP_ -#define MYX_MATH_FLOAT_CMP_TYPES_HPP_ - -#pragma once - -#include - -/** - * @brief Объединение для получения знака аргумента типа float. - */ -union FloatCmp -{ - int32_t i; - float f; - - /** - * @brief Инициализация. - */ - explicit FloatCmp( float num = 0.0F ) : f( num ) - { - } - - /** - * @brief Функция, возращающая true, если значение отрицательное - */ - bool negative() const - { - return( i < 0 ); - } -}; - -/** - * @brief Объединение для получения знака аргумента типа double. - */ -union DoubleCmp -{ - int64_t i; - double d; - - /** - * @brief Инициализация. - */ - explicit DoubleCmp( double num = 0.0L ) : d( num ) - { - } - - /** - * @brief Функция, возращающая true, если значение отрицательное - */ - bool negative() const - { - return( i < 0 ); - } -}; - -#endif // MYX_MATH_FLOAT_CMP_TYPES_HPP_ diff --git a/src/myx/math/functions.hpp b/src/myx/math/functions.hpp deleted file mode 100644 index 4e231b9..0000000 --- a/src/myx/math/functions.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef MYX_MATH_FUNCTIONS_HPP_ -#define MYX_MATH_FUNCTIONS_HPP_ - -#pragma once - -#include -#include -#include - -namespace myx { - -namespace math { - -/*! - * \brief pow2 Возведение в квадрат - * \param value Значение - * \return Квадрат значения - */ -template < typename T > -auto pow2( T const& value ) -> decltype( boost::math::pow< 2 >( value ) ) -{ - return( boost::math::pow< 2 >( value ) ); -} - -} // namespace math - -} // namespace myx - - -#endif // MYX_MATH_FUNCTIONS_HPP_ diff --git a/src/myx/math/radar.hpp b/src/myx/math/radar.hpp deleted file mode 100644 index 8d800b5..0000000 --- a/src/myx/math/radar.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef MYX_MATH_RADAR_HPP_ -#define MYX_MATH_RADAR_HPP_ - -#pragma once - -#include -#include - -namespace myx { - -namespace math { - -/*! - * \brief geometric_target_visibility Геометрическая видимость цели - * \param earthRadius Радиус Земли - * \param antennaHeight Высота антенны - * \param targetHeight Высота цели - * \return Максимальная дальность видимости цели - */ -template < typename T > -T geometric_target_visibility( const T& earthRadius, const T& antennaHeight, const T& targetHeight ) -{ -// static_assert( std::is_arithmetic< T >::value || std::is_same< T, quantity< length_d > >::value, "Arithmetic type is required." ); - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return ( sqrt( 2 * earthRadius * antennaHeight ) + sqrt( 2 * earthRadius * targetHeight ) ); -} - - -/*! - * \brief radar_target_visibility Видимость цели по лучу - * \param earthRadius Радиус Земли - * \param antennaHeight Высота антенны - * \param targetHeight Высота цели - * \return Максимальная дальность видимости цели - */ -template < typename T > -T radar_target_visibility( T effectiveEarthRadius, T antennaHeight, T targetHeight ) -{ -// static_assert( std::is_arithmetic< T >::value || std::is_same< T, quantity< length_d > >::value, "Arithmetic type is required." ); - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return ( sqrt( 2 * effectiveEarthRadius * antennaHeight ) + sqrt( 2 * effectiveEarthRadius * targetHeight ) ); -} - -} // namespace math - -} // namespace myx - -#endif // MYX_MATH_RADAR_HPP_ diff --git a/src/myx/math/units.hpp b/src/myx/math/units.hpp deleted file mode 100644 index 5a21e46..0000000 --- a/src/myx/math/units.hpp +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef MYX_MATH_UNITS_HPP_ -#define MYX_MATH_UNITS_HPP_ - -#pragma once - -#include -#include - -namespace myx { - -namespace math { - -/*! - * \brief radians_to_degrees Перевод из радиан в градусы - * \param radians Значение в радианах - * \return Значение в градусах - */ -template < typename T > -T radians_to_degrees( const T& radians, typename std::enable_if< std::is_floating_point< T >::value >::type* /*unused*/ = 0 ) -{ - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( radians * M_1_PI * 180.0 ); -} - - -/*! - * \brief degrees_to_radians Перевод из градусов в радианы - * \param degrees Значение в градусах - * \return Значение в радианах - */ -template < typename T > -T degrees_to_radians( const T& degrees, typename std::enable_if< std::is_floating_point< T >::value >::type* /*unused*/ = 0 ) -{ - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( degrees * M_PI / 180.0 ); -} - - -/*! - * \brief decibel_to_power Перевод из децибелов в мощность $y = 10^{db / 10}$ - * \param db Децибелы - * \return Мощность - */ -template < typename T > -T decibel_to_power( T const& db ) -{ - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( std::pow( 10, db / 10.0 ) ); -} - - -/*! - * \brief power_to_decibel Перевод из мощности в децибелы по формуле $y = 10 * \log(x)$ - * \param power Мощность - * \return Децибелы - */ -template < typename T > -T power_to_decibel( T const& power ) -{ - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( 10 * std::log( power ) ); -} - - -/*! - * \brief decibel_to_power Перевод из децибелов в амплитуду $y = 10^{db / 20}$ - * \param db Децибелы - * \return Амплитуда - */template < typename T > -T decibel_to_magnitude( T const& db ) -{ - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( std::pow( 10, db / 20.0 ) ); -} - - -/*! - * \brief magnitude_to_decibel Перевод из амплитуды в децибелы по формуле $y = 20 * \log(x)$ - * \param magnitude Амплитуда - * \return Децибелы - */ -template < typename T > -T magnitude_to_decibel( T const& magnitude ) -{ - static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( 20 * std::log( magnitude ) ); -} - -} // namespace math - -} // namespace myx - -#endif // MYX_MATH_UNITS_HPP_