From 0701276b4fec856d5427e4776eec3cc7c56ec065 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期二, 25 八月 2020 17:51:10 +0800 Subject: [PATCH] 坐标 --- lib/src/main/cpp/test_common/Geometry.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-) diff --git a/lib/src/main/cpp/test_common/Geometry.cpp b/lib/src/main/cpp/test_common/Geometry.cpp index 242f55f..03c9d4b 100644 --- a/lib/src/main/cpp/test_common/Geometry.cpp +++ b/lib/src/main/cpp/test_common/Geometry.cpp @@ -14,6 +14,7 @@ #include <iosfwd> #include <iomanip> #include <sstream> +#include <vector> #include "../jni_log.h" @@ -626,3 +627,43 @@ { return isEqual(p1.X, p2.X) && isEqual(p1.Y, p2.Y); } + +double AvgYaw(std::vector<double> &angles) +{ + double x = 0, y = 0; + double deg = 0; + + for (int i = 0; i < angles.size(); ++i) { + x += sin(toRadians(angles[i])); + y += cos(toRadians(angles[i])); + } + + if (fabs(y) <= EPSILON) { + if (x > EPSILON) { + deg = 90; + } else { + deg = 270; + } + } + else if (fabs(x) <= EPSILON) { + if (y > EPSILON) { + deg = 0; + } else { + deg = 180; + } + } else { + deg = toDegree(atan(fabs(x / y))); + + if (x < -EPSILON && y > EPSILON) { + deg = 360 - deg; + } + else if (x < -EPSILON && y < -EPSILON) { + deg = 180 + deg; + } + else if (x > EPSILON && y < -EPSILON) { + deg = 180 - deg; + } + } + + return deg; +} \ No newline at end of file -- Gitblit v1.8.0