From 8851d9f8fdc60bc2b36bff2053d12240c6e4df17 Mon Sep 17 00:00:00 2001 From: jared Date: Mon, 26 Apr 2021 17:47:11 +0800 Subject: [PATCH] add MathHelp --- .../TaoCommon/src/TaoCommon/Common/MathHelp.h | 39 +++++++++++++++++++ .../TaoCommon/src/TaoCommon/TaoCommon.pri | 1 + 2 files changed, 40 insertions(+) create mode 100644 3rdparty/TaoCommon/src/TaoCommon/Common/MathHelp.h diff --git a/3rdparty/TaoCommon/src/TaoCommon/Common/MathHelp.h b/3rdparty/TaoCommon/src/TaoCommon/Common/MathHelp.h new file mode 100644 index 0000000..dae7ddd --- /dev/null +++ b/3rdparty/TaoCommon/src/TaoCommon/Common/MathHelp.h @@ -0,0 +1,39 @@ +#pragma once +#include +#include +#include +//inRange 检查 value 小于等于 max, 大于等于min + +//inRange通用模版函数 +template +static bool inRange(const T &value, const T &min, const T &max) +{ + if (min <= value && value <= max) { + return true; + } + return false; +} +//inRange 模版偏特化,遇到double时,使用std的浮点数比较代替 常规比较。规避精度误差 +template<> +static bool inRange(const double &value, const double &min, const double &max) +{ + if (std::isgreaterequal(value, min) && std::islessequal(value, max)) { + return true; + } + return false; +} +//inRange 模版偏特化,遇到float时,使用std的浮点数比较代替 常规比较。规避精度误差 +template<> +static bool inRange(const float &value, const float &min, const float &max) +{ + if (std::isgreaterequal(value, min) && std::islessequal(value, max)) { + return true; + } + return false; +} +//clamp, 限制 value在 [min - Max]区间. +template +static T clamp(const T &value, const T &min, const T &max) +{ + return std::max(min,std::min(value, max)); +} diff --git a/3rdparty/TaoCommon/src/TaoCommon/TaoCommon.pri b/3rdparty/TaoCommon/src/TaoCommon/TaoCommon.pri index 8e419ea..0007f3e 100644 --- a/3rdparty/TaoCommon/src/TaoCommon/TaoCommon.pri +++ b/3rdparty/TaoCommon/src/TaoCommon/TaoCommon.pri @@ -11,6 +11,7 @@ HEADERS += \ $$PWD/Common/Package.h \ $$PWD/Common/PropertyHelper.h \ $$PWD/Common/Subject.h \ + $$PWD/Common/MathHelp.h \ $$PWD/Frameless/TaoFrameLessView.h \ $$PWD/Logger/Logger.h \ $$PWD/Logger/LoggerTemplate.h \