From 59abff0d03403344619420aa0bcd9c2b28ff3522 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期三, 08 四月 2020 11:06:58 +0800 Subject: [PATCH] 坐标 --- lib/src/main/cpp/test_common/Geometry.cpp | 15 +++++---------- 1 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/src/main/cpp/Geometry.cpp b/lib/src/main/cpp/test_common/Geometry.cpp similarity index 95% rename from lib/src/main/cpp/Geometry.cpp rename to lib/src/main/cpp/test_common/Geometry.cpp index 0a43ae1..db6deb5 100644 --- a/lib/src/main/cpp/Geometry.cpp +++ b/lib/src/main/cpp/test_common/Geometry.cpp @@ -2,7 +2,7 @@ // Created by YY on 2019/4/30. // -#include "defs.h" +#include "../defs.h" #include "Geometry.h" #include <stdbool.h> #include <stdint.h> @@ -12,7 +12,7 @@ #include <initializer_list> #include <cctype> -#include "jni_log.h" +#include "../jni_log.h" using namespace std; @@ -245,7 +245,6 @@ Relation IntersectionOf(Line line1, Line line2) { - // Fail if either line segment is zero-length. if ((isEqual(line1.X1, line1.X2) && isEqual(line1.Y1, line1.Y2)) || (isEqual(line2.X1, line2.X2) && isEqual(line2.Y1, line2.Y2))) return GM_None; @@ -255,15 +254,14 @@ if ((isEqual(line1.X1, line2.X2) && isEqual(line1.Y1, line2.Y2)) || (isEqual(line1.X2, line2.X2) && isEqual(line1.Y2, line2.Y2))) return GM_Intersection; - // (1) Translate the system so that point A is on the origin. + // 鐩寸嚎鍧愭爣鍙樻崲閲嶅悎 line1.X2 -= line1.X1; line1.Y2 -= line1.Y1; line2.X1 -= line1.X1; line2.Y1 -= line1.Y1; line2.X2 -= line1.X1; line2.Y2 -= line1.Y1; - // Discover the length of segment A-B. double distAB = sqrt(line1.X2 * line1.X2 + line1.Y2 * line1.Y2); - // (2) Rotate the system so that point B is on the positive X axis. + // 鏃嬭浆鍒癤杞� double theCos = line1.X2 / distAB; double theSin = line1.Y2 / distAB; double newX = line2.X1 * theCos + line2.Y1 * theSin; @@ -274,19 +272,16 @@ line2.Y2 = line2.Y2 * theCos - line2.X2 * theSin; line2.X2 = newX; - // Fail if segment C-D doesn't cross line A-B. if ((line2.Y1 < 0 && line2.Y2 < 0) || (line2.Y1 >= 0 && line2.Y2 >= 0)) { return GM_None; } - // (3) Discover the position of the intersection point along line A-B. double posAB = line2.X2 + (line2.X1 - line2.X2) * line2.Y2 / (line2.Y2 - line2.Y1); - // Fail if segment C-D crosses line A-B outside of segment A-B. if (posAB < 0 || posAB > distAB) { return GM_None; } - // (4) Apply the discovered position to line A-B in the original coordinate system. + return GM_Intersection; } -- Gitblit v1.8.0