aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/utils/CMakeLists.txt1
-rw-r--r--src/libs/utils/mathutils.cpp30
-rw-r--r--src/libs/utils/mathutils.h12
-rw-r--r--src/libs/utils/utils.qbs2
4 files changed, 45 insertions, 0 deletions
diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt
index 3a891a3d59..b98d18bf93 100644
--- a/src/libs/utils/CMakeLists.txt
+++ b/src/libs/utils/CMakeLists.txt
@@ -89,6 +89,7 @@ add_qtc_library(Utils
listutils.h
macroexpander.cpp macroexpander.h
mapreduce.h
+ mathutils.cpp mathutils.h
mimeutils.h
minimizableinfobars.cpp
minimizableinfobars.h
diff --git a/src/libs/utils/mathutils.cpp b/src/libs/utils/mathutils.cpp
new file mode 100644
index 0000000000..465d4d5f99
--- /dev/null
+++ b/src/libs/utils/mathutils.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
+
+#include "mathutils.h"
+
+#include <QtMath>
+
+namespace Utils::MathUtils {
+
+/*!
+ Linear interpolation:
+ For x = x1 it returns y1.
+ For x = x2 it returns y2.
+*/
+int interpolate(int x, int x1, int x2, int y1, int y2)
+{
+ if (x1 == x2)
+ return y1; // or the middle point between y1 and y2?
+ if (y1 == y2)
+ return y1;
+ if (x == x1)
+ return y1;
+ if (x == x2)
+ return y2;
+ const int numerator = (y2 - y1) * x + x2 * y1 - x1 * y2;
+ const int denominator = x2 - x1;
+ return qRound((double)numerator / denominator);
+}
+
+} // namespace Utils::Math
diff --git a/src/libs/utils/mathutils.h b/src/libs/utils/mathutils.h
new file mode 100644
index 0000000000..20ae6cd342
--- /dev/null
+++ b/src/libs/utils/mathutils.h
@@ -0,0 +1,12 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "utils_global.h"
+
+namespace Utils::MathUtils {
+
+QTCREATOR_UTILS_EXPORT int interpolate(int x, int x1, int x2, int y1, int y2);
+
+} // namespace Utils::Math
diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs
index cf2ad7e79f..5f9cf2f922 100644
--- a/src/libs/utils/utils.qbs
+++ b/src/libs/utils/utils.qbs
@@ -187,6 +187,8 @@ Project {
"macroexpander.cpp",
"macroexpander.h",
"mapreduce.h",
+ "mathutils.cpp",
+ "mathutils.h",
"mimeutils.h",
"minimizableinfobars.cpp",
"minimizableinfobars.h",