From 377290f0c78fce96fa2eff65cef2758f0bdbfe91 Mon Sep 17 00:00:00 2001 From: Brandon Lai-Cheong <brandon.lai-cheong@uwaterloo.ca> Date: Fri, 25 Oct 2024 13:14:43 -0400 Subject: [PATCH] refactor into include folder --- .vscode/settings.json | 68 +++++++++++++++++++ CMakeLists.txt | 11 +-- {src/contourize => include}/contourize.h | 0 {src/shapes => include}/edge.h | 0 .../intersections => include}/intersections.h | 3 +- {src/orientation => include}/orientation.h | 0 {src/shapes => include}/point.h | 0 .../static_vector => include}/static_vector.h | 0 {src/shapes => include}/triangle.h | 2 +- {src/shapes => include}/triangle_edges.h | 0 include/triangulation.h | 9 +++ {src => include}/union.h | 1 + src/shapes/triangle.cpp | 6 +- src/triangulation/triangulation.cpp | 5 -- src/triangulation/triangulation.h | 7 -- src/union.cpp | 9 ++- src/{contourize => utilities}/contourize.cpp | 5 +- .../intersections.cpp | 5 +- .../orientation.cpp | 2 +- src/utilities/triangulation.cpp | 21 ++++++ tests/unit_tests/contourize_tests.cpp | 11 +-- tests/unit_tests/point_in_triangle_tests.cpp | 10 +++ tests/unit_tests/simple_triangle_tests.cpp | 10 +-- tests/unit_tests/triangulation_tests.cpp | 12 ++++ 24 files changed, 152 insertions(+), 45 deletions(-) create mode 100644 .vscode/settings.json rename {src/contourize => include}/contourize.h (100%) rename {src/shapes => include}/edge.h (100%) rename {src/intersections => include}/intersections.h (72%) rename {src/orientation => include}/orientation.h (100%) rename {src/shapes => include}/point.h (100%) rename {src/static_vector => include}/static_vector.h (100%) rename {src/shapes => include}/triangle.h (86%) rename {src/shapes => include}/triangle_edges.h (100%) create mode 100644 include/triangulation.h rename {src => include}/union.h (85%) delete mode 100644 src/triangulation/triangulation.cpp delete mode 100644 src/triangulation/triangulation.h rename src/{contourize => utilities}/contourize.cpp (96%) rename src/{intersections => utilities}/intersections.cpp (95%) rename src/{orientation => utilities}/orientation.cpp (91%) create mode 100644 src/utilities/triangulation.cpp create mode 100644 tests/unit_tests/point_in_triangle_tests.cpp create mode 100644 tests/unit_tests/triangulation_tests.cpp diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..afcc6ec --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,68 @@ +{ + "files.associations": { + "any": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "forward_list": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "typeinfo": "cpp", + "variant": "cpp" + } +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 01ff39d..d1a3823 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,18 +22,19 @@ add_executable( tests tests/unit_tests/simple_triangle_tests.cpp tests/unit_tests/contourize_tests.cpp - src/intersections/intersections.cpp + tests/unit_tests/point_in_triangle_tests.cpp + src/utilities/intersections.cpp src/shapes/triangle.cpp src/shapes/triangle_edges.cpp - src/contourize/contourize.cpp + src/utilities/contourize.cpp src/shapes/edge.cpp - src/orientation/orientation.cpp + src/utilities/orientation.cpp src/shapes/point.cpp src/union.cpp - src/triangulation/triangulation.cpp + src/utilities/triangulation.cpp ) -include_directories(src) +include_directories(include) target_link_libraries( tests diff --git a/src/contourize/contourize.h b/include/contourize.h similarity index 100% rename from src/contourize/contourize.h rename to include/contourize.h diff --git a/src/shapes/edge.h b/include/edge.h similarity index 100% rename from src/shapes/edge.h rename to include/edge.h diff --git a/src/intersections/intersections.h b/include/intersections.h similarity index 72% rename from src/intersections/intersections.h rename to include/intersections.h index ca089a0..952d64f 100644 --- a/src/intersections/intersections.h +++ b/include/intersections.h @@ -1,7 +1,6 @@ #pragma once #include <vector> -#include "../shapes/point.h" -#include "../shapes/triangle.h" +#include <triangle.h> struct TrigTrigInterResults { std::vector<Point> results; diff --git a/src/orientation/orientation.h b/include/orientation.h similarity index 100% rename from src/orientation/orientation.h rename to include/orientation.h diff --git a/src/shapes/point.h b/include/point.h similarity index 100% rename from src/shapes/point.h rename to include/point.h diff --git a/src/static_vector/static_vector.h b/include/static_vector.h similarity index 100% rename from src/static_vector/static_vector.h rename to include/static_vector.h diff --git a/src/shapes/triangle.h b/include/triangle.h similarity index 86% rename from src/shapes/triangle.h rename to include/triangle.h index 32b2315..f95e607 100644 --- a/src/shapes/triangle.h +++ b/include/triangle.h @@ -1,7 +1,7 @@ #pragma once #include "point.h" -// points specified clockwise +// points specified counterclockwise struct Triangle { Point points[3]; int depth; diff --git a/src/shapes/triangle_edges.h b/include/triangle_edges.h similarity index 100% rename from src/shapes/triangle_edges.h rename to include/triangle_edges.h diff --git a/include/triangulation.h b/include/triangulation.h new file mode 100644 index 0000000..299914a --- /dev/null +++ b/include/triangulation.h @@ -0,0 +1,9 @@ +#pragma once +#include <vector> + +struct Triangle; +struct Point; + + +std::vector<Triangle> triangulate(std::vector<Point> points); + diff --git a/src/union.h b/include/union.h similarity index 85% rename from src/union.h rename to include/union.h index c6bca29..3aeaae9 100644 --- a/src/union.h +++ b/include/union.h @@ -1,5 +1,6 @@ #pragma once #include <vector> +struct Triangle; std::vector<Triangle> unionize(const Triangle &t1, const Triangle &t2); \ No newline at end of file diff --git a/src/shapes/triangle.cpp b/src/shapes/triangle.cpp index 10229a5..c07c9a4 100644 --- a/src/shapes/triangle.cpp +++ b/src/shapes/triangle.cpp @@ -12,7 +12,7 @@ bool Triangle::pointInTriangle(const Point &p) const { // all tests must be positive auto edges = TriangleEdges(*this); - return edges.e1.positiveSide(p) && - edges.e2.positiveSide(p) && - edges.e3.positiveSide(p); + return !edges.e1.positiveSide(p) && + !edges.e2.positiveSide(p) && + !edges.e3.positiveSide(p); } \ No newline at end of file diff --git a/src/triangulation/triangulation.cpp b/src/triangulation/triangulation.cpp deleted file mode 100644 index bbd45b7..0000000 --- a/src/triangulation/triangulation.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "triangulation.h" - -std::vector<Triangle> monotoneTriangulate(std::vector<Point> &points) { - -} \ No newline at end of file diff --git a/src/triangulation/triangulation.h b/src/triangulation/triangulation.h deleted file mode 100644 index 30317cb..0000000 --- a/src/triangulation/triangulation.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include <vector> - -struct Triangle; -struct Point; - -std::vector<Triangle> monotoneTriangulate(std::vector<Point> &points); \ No newline at end of file diff --git a/src/union.cpp b/src/union.cpp index 09d7fb6..54a9e90 100644 --- a/src/union.cpp +++ b/src/union.cpp @@ -1,10 +1,9 @@ -#include "shapes/triangle.h" #include <vector> #include <optional> -#include <intersections/intersections.h> -#include <contourize/contourize.h> -#include <triangulation/triangulation.h> #include <union.h> +#include <contourize.h> +#include <intersections.h> +#include <triangulation.h> std::vector<Triangle> unionize(const Triangle &t1, const Triangle &t2) { @@ -23,7 +22,7 @@ std::vector<Triangle> unionize(const Triangle &t1, const Triangle &t2) { std::vector<Point> contour = contourize(t1, t2, newIntersections); - return monotoneTriangulate(contour); + return triangulate(contour); } void unionize(Triangle soup) { diff --git a/src/contourize/contourize.cpp b/src/utilities/contourize.cpp similarity index 96% rename from src/contourize/contourize.cpp rename to src/utilities/contourize.cpp index e33f59d..668b70e 100644 --- a/src/contourize/contourize.cpp +++ b/src/utilities/contourize.cpp @@ -1,7 +1,6 @@ -#include <shapes/triangle.h> #include <vector> -#include "contourize.h" -#include <orientation/orientation.h> +#include <triangle.h> +#include <orientation.h> Triangle clockwiseToCounterclockwise(const Triangle &t) { return Triangle(t.points[0], t.points[2], t.points[1], t.depth); diff --git a/src/intersections/intersections.cpp b/src/utilities/intersections.cpp similarity index 95% rename from src/intersections/intersections.cpp rename to src/utilities/intersections.cpp index c6b1ec1..8b299f4 100644 --- a/src/intersections/intersections.cpp +++ b/src/utilities/intersections.cpp @@ -1,8 +1,7 @@ #include "intersections.h" -#include <shapes/edge.h> -#include <shapes/triangle_edges.h> -#include <shapes/point.h> #include <optional> +#include <edge.h> +#include <triangle_edges.h> diff --git a/src/orientation/orientation.cpp b/src/utilities/orientation.cpp similarity index 91% rename from src/orientation/orientation.cpp rename to src/utilities/orientation.cpp index ee414a8..14817eb 100644 --- a/src/orientation/orientation.cpp +++ b/src/utilities/orientation.cpp @@ -1,5 +1,5 @@ #include "orientation.h" -#include <shapes/point.h> +#include <point.h> Orientation orientation(const Point &p1, const Point &p2, const Point &p3) { int val = (p2.y - p1.y) * (p3.x - p2.x) - (p2.x - p1.x) * (p3.y - p2.y); diff --git a/src/utilities/triangulation.cpp b/src/utilities/triangulation.cpp new file mode 100644 index 0000000..186976e --- /dev/null +++ b/src/utilities/triangulation.cpp @@ -0,0 +1,21 @@ +#include "triangulation.h" +#include <list> +#include <point.h> +#include <triangle.h> +/* +bool isAnEar(Point point, Triangle triangle, Point start[], Point end[]) { + +} +*/ + +std::vector<Triangle> triangulate(std::vector<Point> points) { + //std::list<Point> polygon = std::list(points); + std::vector<Triangle> result; + + for (int i = 0; i < points.size(); i++) { + + } + + return result; + +} \ No newline at end of file diff --git a/tests/unit_tests/contourize_tests.cpp b/tests/unit_tests/contourize_tests.cpp index 27e318d..93bda8d 100644 --- a/tests/unit_tests/contourize_tests.cpp +++ b/tests/unit_tests/contourize_tests.cpp @@ -1,10 +1,11 @@ -#include "gtest/gtest.h" -#include <contourize/contourize.h> -#include <intersections/intersections.h> +#include <gtest/gtest.h> +#include <contourize.h> +#include <triangle.h> +#include <intersections.h> TEST(ContourizeTest, TwoTriangles) { - auto t1 = Triangle(Point(0,0), Point(5,0), Point(2,3), 0); - auto t2 = Triangle(Point(3,1), Point(6,1), Point(4,3), 0); + auto t1 = Triangle(Point{0,0}, Point{5,0}, Point{2,3}, 0); + auto t2 = Triangle(Point{3,1}, Point{6,1}, Point{4,3}, 0); auto newIntersections = intersections(t1, t2); diff --git a/tests/unit_tests/point_in_triangle_tests.cpp b/tests/unit_tests/point_in_triangle_tests.cpp new file mode 100644 index 0000000..00811db --- /dev/null +++ b/tests/unit_tests/point_in_triangle_tests.cpp @@ -0,0 +1,10 @@ +#include <gtest/gtest.h> +#include <triangle.h> + +TEST(PointInTriangleTests, PointInTriangle) { + Triangle t = Triangle({1, 0.5}, {3, 0.2}, {2, 1}, 0); + EXPECT_TRUE(t.pointInTriangle({1.96, 0.467})); + EXPECT_FALSE(t.pointInTriangle({1.107,0.834})); + EXPECT_FALSE(t.pointInTriangle({2.553, 0.823})); + EXPECT_FALSE(t.pointInTriangle({1.63, 0.13})); +} \ No newline at end of file diff --git a/tests/unit_tests/simple_triangle_tests.cpp b/tests/unit_tests/simple_triangle_tests.cpp index 01e759f..f3d4783 100644 --- a/tests/unit_tests/simple_triangle_tests.cpp +++ b/tests/unit_tests/simple_triangle_tests.cpp @@ -1,10 +1,10 @@ -#include "gtest/gtest.h" -#include "../../src/shapes/triangle.h" -#include "../../src/intersections/intersections.h" +#include <gtest/gtest.h> +#include <triangle.h> +#include <intersections.h> TEST (TriangleIntersectionTests, TriangleIntersection) { - auto t1 = Triangle(Point(0,0), Point(2,3), Point(5,0), 0); - auto t2 = Triangle(Point(3,1), Point(4,3), Point(6,1), 0); + auto t1 = Triangle(Point{0,0}, Point{2,3}, Point{5,0}, 0); + auto t2 = Triangle(Point{3,1}, Point{4,3}, Point{6,1}, 0); std::vector<Point> results = intersections(t1, t2); diff --git a/tests/unit_tests/triangulation_tests.cpp b/tests/unit_tests/triangulation_tests.cpp new file mode 100644 index 0000000..a69bf51 --- /dev/null +++ b/tests/unit_tests/triangulation_tests.cpp @@ -0,0 +1,12 @@ +#include "gtest/gtest.h" +#include <shapes/point.h> + + +TEST(TriangulationTests, Page3Example) { + std::vector<Point> polygon = { + {3,48}, {52, 8}, {99,50}, {138,25}, + {175, 77}, {131, 72}, {111, 113}, + {72, 43}, {26, 55}, {29, 100}}; + + +} \ No newline at end of file -- GitLab