From 9f309437fcafaebcc33224abd951a6b6fdea8e41 Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期日, 23 二月 2020 15:20:48 +0800
Subject: [PATCH] 角度修正。

---
 lib/src/main/cpp/driver_test.cpp |   40 +++++++++++++++++++++++-----------------
 1 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index a78aa18..f960aa6 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -977,25 +977,31 @@
     carModel->basePoint = main_ant;
 
     for (int i = 0; i < carModel->pointNum; ++i) {
-        double tx = carModel->carDesc[i].distance*sin(toRadians(azimuth));
-        double ty = carModel->carDesc[i].distance*cos(toRadians(azimuth));
+        double qrx = carModel->carDesc[i].distance * sin(toRadians(carModel->carDesc[i].angle));
+        double qry = carModel->carDesc[i].distance * cos(toRadians(carModel->carDesc[i].angle)) * cos(toRadians(pitch));
 
-//        double qrx = carModel->carDesc[i].distance * sin(toRadians(carModel->carDesc[i].angle));
-//        double qry = carModel->carDesc[i].distance * cos(toRadians(carModel->carDesc[i].angle)) * cos(toRadians(pitch));
-//
-//        double projDis = sqrt(pow(qrx, 2) + pow(pry, 2));
-//        double projAng;
-//
-//        if (fabs(qry) <= EPSILON) {
-//            projAng = 90;
-//        } else {
-//            projAng = toDegree(atan(qrx / qry));
-//        }
+        double projectDistance = sqrt(pow(qrx, 2) + pow(qry, 2));
+        double projectAngle = toDegree(acos(qry / projectDistance));
 
-        carModel->carXY[i].X = (tx)*cos(toRadians(carModel->carDesc[i].angle)) -
-                                   (ty)*sin(toRadians(carModel->carDesc[i].angle)) + main_ant.X;
-        carModel->carXY[i].Y = (tx)*sin(toRadians(carModel->carDesc[i].angle)) +
-                                   (ty)*cos(toRadians(carModel->carDesc[i].angle)) + main_ant.Y;
+        if (carModel->carDesc[i].angle > 180) {
+            projectAngle = 360 - projectAngle;
+        }
+
+        double tx = projectDistance*sin(toRadians(azimuth));
+        double ty = projectDistance*cos(toRadians(azimuth));
+
+        carModel->carXY[i].X = tx * cos(toRadians(projectAngle)) -
+                                   ty*sin(toRadians(projectAngle)) + main_ant.X;
+        carModel->carXY[i].Y = tx * sin(toRadians(projectAngle)) +
+                                   ty * cos(toRadians(projectAngle)) + main_ant.Y;
+
+//        double tx = carModel->carDesc[i].distance*sin(toRadians(azimuth));
+//        double ty = carModel->carDesc[i].distance*cos(toRadians(azimuth));
+//
+//        carModel->carXY[i].X = (tx)*cos(toRadians(carModel->carDesc[i].angle)) -
+//                                   (ty)*sin(toRadians(carModel->carDesc[i].angle)) + main_ant.X;
+//        carModel->carXY[i].Y = (tx)*sin(toRadians(carModel->carDesc[i].angle)) +
+//                                   (ty)*cos(toRadians(carModel->carDesc[i].angle)) + main_ant.Y;
     }
 }
 

--
Gitblit v1.8.0