Skip to content
Snippets Groups Projects
Unverified Commit e725ee6a authored by blaicheo's avatar blaicheo Committed by GitHub
Browse files

Merge pull request #1 from blacheo/alt_triangulation

Alt triangulation
parents a5c64aec 1fa96490
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.12) ...@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(FetchContent) include(FetchContent)
FetchContent_Declare( FetchContent_Declare(
googletest googletest
...@@ -41,6 +43,9 @@ add_executable( ...@@ -41,6 +43,9 @@ add_executable(
src/data_structures/box.cpp src/data_structures/box.cpp
src/data_structures/quad_tree.cpp src/data_structures/quad_tree.cpp
tests/quad_tree_tests.cpp tests/quad_tree_tests.cpp
tests/edge_union_cases.cpp
tests/unit_tests/convex_triangulation_tests.cpp
src/utilities/convex_triangulation.cpp
) )
include_directories(include) include_directories(include)
......
#pragma once
#include <triangle.h>
#include <point.h>
#include <vector>
// Requires a convex shape
std::vector<Triangle> convexTriangulation(const std::vector<Point> &points, int depth, int triangleId);
...@@ -11,4 +11,5 @@ struct Triangle ...@@ -11,4 +11,5 @@ struct Triangle
Triangle(Point p1, Point p2, Point p3, int depth, int id=0); Triangle(Point p1, Point p2, Point p3, int depth, int id=0);
bool pointInTriangle(const Point &p) const; bool pointInTriangle(const Point &p) const;
Point nextPoint(int pointIndex) const; Point nextPoint(int pointIndex) const;
bool operator==(const Triangle &other) const;
}; };
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
#include "triangle_edges.h" #include "triangle_edges.h"
#include "edge.h" #include "edge.h"
bool Triangle::operator==(const Triangle &other) const {
return points[0] == other.points[0] &&
points[1] == other.points[1] &&
points[2] == other.points[2] &&
depth == other.depth &&
id == other.id;
}
bool Triangle::neighbours(const Triangle &other) const { bool Triangle::neighbours(const Triangle &other) const {
return false; return false;
} }
...@@ -23,4 +31,4 @@ bool Triangle::pointInTriangle(const Point &p) const { ...@@ -23,4 +31,4 @@ bool Triangle::pointInTriangle(const Point &p) const {
int nextPoint(int pointIndex) { int nextPoint(int pointIndex) {
return (pointIndex + 1) % 3; return (pointIndex + 1) % 3;
} }
\ No newline at end of file
#include <convex_triangulation.h>
std::vector<Triangle> convexTriangulation(const std::vector<Point> &points, int depth, int triangleId) {
const int size = points.size();
if (size < 3) {
return std::vector<Triangle>{};
}
const Triangle t1 = Triangle(points[0], points[1], points[2], depth, triangleId);
std::vector<Triangle> results = {t1};
Point first = points[0];
for (int i = size - 1; i >= 3; i--) {
results.push_back(Triangle(first, points[2], points[i], depth, triangleId));
first = points[i];
}
return results;
}
#include <gtest/gtest.h>
#include <union.h>
#include <triangle.h>
TEST(UnionEdgeTests, TriangleVertexOnEdge) {
Triangle t1 = Triangle({}, {}, {}, 1, 1);
Triangle t2 = Triangle({}, {}, {}, 2, 2);
auto result = unionize(t1, t2);
}
TEST(UnionEdgeTests, TriangleEdgeLength0) {
Triangle t1 = Triangle({1,1}, {2,2}, {3,3}, 1, 1);
Triangle t2 = Triangle({}, {}, {}, 2, 2);
}
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <quad_tree.h> #include <quad_tree.h>
/*
TEST (QuadTreeTest, OverlappingTriangles) { TEST (QuadTreeTest, OverlappingTriangles) {
QuadTree q{Box{0, 10, 0, 10}}; QuadTree q{Box{0, 10, 0, 10}};
...@@ -18,7 +19,7 @@ TEST (QuadTreeTest, OverlappingTriangles) { ...@@ -18,7 +19,7 @@ TEST (QuadTreeTest, OverlappingTriangles) {
EXPECT_EQ(q.pointIntersection(Point{1,1}), 1); EXPECT_EQ(q.pointIntersection(Point{1,1}), 1);
} }
*/
TEST (QuadTreeTest, SingleInsertion) { TEST (QuadTreeTest, SingleInsertion) {
QuadTree q{Box{0, 10, 0, 10}}; QuadTree q{Box{0, 10, 0, 10}};
...@@ -49,4 +50,4 @@ TEST (QuadTreeTest, PointOnTriangleQueryTest) { ...@@ -49,4 +50,4 @@ TEST (QuadTreeTest, PointOnTriangleQueryTest) {
EXPECT_EQ(q.pointIntersection(Point{3.5, 1.5}), 1); EXPECT_EQ(q.pointIntersection(Point{3.5, 1.5}), 1);
EXPECT_EQ(q.pointIntersection(Point{-1,-1}), POINT_NOT_IN_QUADTREE); EXPECT_EQ(q.pointIntersection(Point{-1,-1}), POINT_NOT_IN_QUADTREE);
} }
\ No newline at end of file
#include <gtest/gtest.h>
#include <convex_triangulation.h>
#include <vector>
TEST(ConvexTriangulationTests, Simple) {
Point p1{1,3};
Point p2{2,2};
Point p3{3,2.1};
Point p4{4,3.2};
Point p5{2.1,4};
std::vector<Point> points = {
p1, p2, p3, p4, p5
};
auto results = convexTriangulation(points, 2, 2);
std::vector<Triangle> expected_result {
Triangle(p1, p2, p3, 2, 2),
Triangle(p1, p3, p5, 2, 2),
Triangle(p5, p3, p4, 2, 2)
};
EXPECT_EQ(results, expected_result);
}
TEST(ConvexTriangulationTests, TrivialTriangle) {
std::vector<Point> points = {
{0,0},
{2,0},
{1.5, 2}
};
auto results = convexTriangulation(points, 1, 1);
Triangle expected_triangle = Triangle({0,0}, {2,0}, {1.5, 2}, 1, 1);
EXPECT_EQ(results.size(), 1);
EXPECT_EQ(results[0], expected_triangle);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment