From b3367003d06c572a9f26607145cca0dc9b57a14e Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Sat, 18 Sep 2021 14:42:04 +0800 Subject: [PATCH] tmp pdate --- delaunay.h | 15 +++-- delaunay_tmp.h => delaunay_backup.h | 17 +++-- demo.cpp | 6 +- demo.msh | 23 +++---- demo.neigh | 13 ++-- demo_back.off | 14 +++++ demo_backup.cpp | 76 ++++++++++++++++++++++ log.txt | 84 +++++++++++++++++++++++++ log_backup.txt | 98 +++++++++++++++++++++++++++++ 9 files changed, 315 insertions(+), 31 deletions(-) rename delaunay_tmp.h => delaunay_backup.h (92%) create mode 100644 demo_back.off create mode 100644 demo_backup.cpp create mode 100644 log.txt create mode 100644 log_backup.txt diff --git a/delaunay.h b/delaunay.h index b9f0c07..dcb6e70 100644 --- a/delaunay.h +++ b/delaunay.h @@ -128,16 +128,16 @@ void triangulation(std::vector &in_verts, std::vector &out vertex2dc *tmp_vert = nullptr; std::vector assit_vert; - tmp_vert = new vertex2dc(midx - maxi_s, midy - maxi_s); // lower left corner + tmp_vert = new vertex2dc(midx - maxi_s, midy - maxi_s, 99990); // lower left corner assit_vert.push_back(tmp_vert); - tmp_vert = new vertex2dc(midx + maxi_s, midy - maxi_s); // lower right corner + tmp_vert = new vertex2dc(midx + maxi_s, midy - maxi_s, 99991); // lower right corner assit_vert.push_back(tmp_vert); - tmp_vert = new vertex2dc(midx + maxi_s, midy + maxi_s); // upper right corner + tmp_vert = new vertex2dc(midx + maxi_s, midy + maxi_s, 99992); // upper right corner assit_vert.push_back(tmp_vert); - tmp_vert = new vertex2dc(midx - maxi_s, midy + maxi_s); // upper left corner + tmp_vert = new vertex2dc(midx - maxi_s, midy + maxi_s, 99993); // upper left corner assit_vert.push_back(tmp_vert); triangle *old_tri = nullptr, *tmp_tri = nullptr; @@ -316,6 +316,13 @@ void triangulation(std::vector &in_verts, std::vector &out } } } + + std::cout << "Insert time: " << i + 1 << std::endl; + for (int e = 0; e < out_tris.size(); ++e) + { + std::cout << out_tris[e]->vert[0]->id << " " << out_tris[e]->vert[1]->id << " " << out_tris[e]->vert[2]->id << std::endl; + } + std::cout << "===================\n"; } // remove any triangles has an assistant vertex from out_tris diff --git a/delaunay_tmp.h b/delaunay_backup.h similarity index 92% rename from delaunay_tmp.h rename to delaunay_backup.h index 2b2e0e5..9f169d3 100644 --- a/delaunay_tmp.h +++ b/delaunay_backup.h @@ -12,6 +12,8 @@ #include "cmath" #include "vector" +#include "iostream" + #define ZERO 1e-5 // Start vertex definition @@ -118,16 +120,16 @@ void triangulation(std::vector &in_verts, std::vector &out_ vertex2dc *tmp_vert = nullptr; std::vector assit_vert; - tmp_vert = new vertex2dc(midx - maxi_s, midy - maxi_s); // lower left corner + tmp_vert = new vertex2dc(midx - maxi_s, midy - maxi_s, 99990); // lower left corner assit_vert.push_back(tmp_vert); - tmp_vert = new vertex2dc(midx + maxi_s, midy - maxi_s); // lower right corner + tmp_vert = new vertex2dc(midx + maxi_s, midy - maxi_s, 99991); // lower right corner assit_vert.push_back(tmp_vert); - tmp_vert = new vertex2dc(midx + maxi_s, midy + maxi_s); // upper right corner + tmp_vert = new vertex2dc(midx + maxi_s, midy + maxi_s, 99992); // upper right corner assit_vert.push_back(tmp_vert); - tmp_vert = new vertex2dc(midx - maxi_s, midy + maxi_s); // upper left corner + tmp_vert = new vertex2dc(midx - maxi_s, midy + maxi_s, 99993); // upper left corner assit_vert.push_back(tmp_vert); triangle *tmp_tri = nullptr; @@ -206,6 +208,13 @@ void triangulation(std::vector &in_verts, std::vector &out_ tmp_tri = cnst_tri[c]; delete tmp_tri; tmp_tri = nullptr; } + + std::cout << "Insert time: " << i + 1 << std::endl; + for (int e = 0; e < exist_tri.size(); ++e) + { + std::cout << exist_tri[e]->vert[0]->id << " " << exist_tri[e]->vert[1]->id << " " << exist_tri[e]->vert[2]->id << std::endl; + } + std::cout << "===================\n"; } // remove any triangles has an assistant vertex from exist_tri diff --git a/demo.cpp b/demo.cpp index a11bf29..dde631d 100644 --- a/demo.cpp +++ b/demo.cpp @@ -5,8 +5,7 @@ int main(int argc, char const *argv[]) { - /* - std::vector points(21); + std::vector points(7); points[0].set(-0.8, -0.8, 0); points[1].set(0.4, -1.2, 1); points[2].set(1.2, -0.9, 2); @@ -14,6 +13,7 @@ int main(int argc, char const *argv[]) points[4].set(2.5, 0.5, 4); points[5].set(4.1, 0.7, 5); points[6].set(5.7, 1.8, 6); + /* points[7].set(5.1, 3.4, 7); points[8].set(2.5, 4.4, 8); points[9].set(1.2, 3.7, 9); @@ -30,6 +30,7 @@ int main(int argc, char const *argv[]) points[20].set(3.6, 3.1, 20); */ + /* std::vector points(7); points[0].set(-0.8, -0.8, 0); points[1].set(0.4, -1.2, 1); @@ -38,6 +39,7 @@ int main(int argc, char const *argv[]) points[4].set(0.2, -0.15, 4); points[5].set(0.5, 0.375, 5); points[6].set(0.7, -0.15, 6); + */ if (duplicated_vertex(points)) { diff --git a/demo.msh b/demo.msh index fa79819..88efeda 100644 --- a/demo.msh +++ b/demo.msh @@ -5,19 +5,16 @@ $Nodes 7 1 -0.8 -0.8 0.0 2 0.4 -1.2 0.0 -3 1.2 0.9 0.0 -4 -0.4 0.5 0.0 -5 0.2 -0.15 0.0 -6 0.5 0.375 0.0 -7 0.7 -0.15 0.0 +3 1.2 -0.9 0.0 +4 1.6 0.1 0.0 +5 2.5 0.5 0.0 +6 4.1 0.7 0.0 +7 5.7 1.8 0.0 $EndNodes $Elements -7 -1 2 0 1 2 5 -2 2 0 4 1 5 -3 2 0 3 4 6 -4 2 0 4 5 6 -5 2 0 5 2 7 -6 2 0 3 6 7 -7 2 0 6 5 7 +4 +1 2 0 3 4 2 +2 2 0 4 3 5 +3 2 0 7 5 6 +4 2 0 5 3 6 $EndElements diff --git a/demo.neigh b/demo.neigh index 5ce3eec..5e310ec 100644 --- a/demo.neigh +++ b/demo.neigh @@ -1,8 +1,5 @@ -7 -1 -1 5 2 -2 -1 1 4 -3 -1 4 6 -4 2 7 3 -5 1 -1 7 -6 3 7 -1 -7 4 5 6 +4 +1 2 -1 -1 +2 1 4 -1 +3 -1 4 -1 +4 2 -1 3 diff --git a/demo_back.off b/demo_back.off new file mode 100644 index 0000000..0d5e006 --- /dev/null +++ b/demo_back.off @@ -0,0 +1,14 @@ +OFF +7 5 0 +-0.8 -0.8 0.0 +0.4 -1.2 0.0 +1.2 -0.9 0.0 +1.6 0.1 0.0 +2.5 0.5 0.0 +4.1 0.7 0.0 +5.7 1.8 0.0 +3 0 1 3 +3 1 2 3 +3 3 2 4 +3 4 2 5 +3 4 5 6 \ No newline at end of file diff --git a/demo_backup.cpp b/demo_backup.cpp new file mode 100644 index 0000000..d3c62fa --- /dev/null +++ b/demo_backup.cpp @@ -0,0 +1,76 @@ +#include "delaunay_backup.h" +#include "iostream" +#include "fstream" +#include "iomanip" + +int main(int argc, char const *argv[]) +{ + std::vector points(7); + + points[0].set(-0.8, -0.8, 0); + points[1].set(0.4, -1.2, 1); + points[2].set(1.2, -0.9, 2); + points[3].set(1.6, 0.1, 3); + points[4].set(2.5, 0.5, 4); + points[5].set(4.1, 0.7, 5); + points[6].set(5.7, 1.8, 6); + /* + points[7].set(5.1, 3.4, 7); + points[8].set(2.5, 4.4, 8); + points[9].set(1.2, 3.7, 9); + points[10].set(-1.2, 3.9, 10); + points[11].set(-3.2, 5.1, 11); + points[12].set(-4.3, 2.9, 12); + points[13].set(-3.1, 0.7, 13); + points[14].set(-1.3, 0.6, 14); + points[15].set(-2.1, 2.9, 15); + points[16].set(0.6, 1.2, 16); + points[17].set(0.1, 2.4, 17); + points[18].set(2.4, 2.8, 18); + points[19].set(3.5, 1.8, 19); + points[20].set(3.6, 3.1, 20); + */ + + /* + std::vector points(7); + points[0].set(-0.8, -0.8, 0); + points[1].set(0.4, -1.2, 1); + points[2].set(1.2, 0.9, 2); + points[3].set(-0.4, 0.5, 3); + points[4].set(0.2, -0.15, 4); + points[5].set(0.5, 0.375, 5); + points[6].set(0.7, -0.15, 6); + */ + + if (duplicated_vertex(points)) + { + std::cerr << "Duplicated vertice detected.\n"; + return 0; + } + + std::vector elements; + triangulation(points, elements); + + if (fully_delaunay(elements, points)) + { + std::clog << "The triangulation is fully delaunay.\n"; + } + else std::clog << "The triangulation is not fully delaunay\n"; + + // Write a OFF file + std::cout << "OFF\n"; + std::cout << points.size() << " " << elements.size() << " 0\n"; + for (int i = 0; i < points.size(); i++) + { + std::cout << std::setprecision(16) << points[i].x << " " << points[i].y << " 0.0" << std::endl; + } + + for (int i = 0; i < elements.size(); i++) + { + std::cout << "3 " << elements[i].vert[0]->id << " " << elements[i].vert[1]->id + << " " << elements[i].vert[2]->id << std::endl; + } + return 0; +} + + diff --git a/log.txt b/log.txt new file mode 100644 index 0000000..fd45a0b --- /dev/null +++ b/log.txt @@ -0,0 +1,84 @@ +Insert time: 1 +0 99991 99992 +99990 99991 0 +99992 99993 0 +99993 99990 0 +=================== +Insert time: 2 +99990 99991 1 +1 99993 0 +99993 99990 0 +0 99990 1 +99991 99992 1 +99992 99993 1 +=================== +Insert time: 3 +99990 99991 1 +1 99993 0 +99993 99990 0 +0 99990 1 +2 99993 1 +99991 99992 2 +99992 99993 2 +1 99991 2 +=================== +Insert time: 4 +99990 99991 1 +1 99993 0 +99993 99990 0 +0 99990 1 +2 3 1 +99991 99992 3 +1 99991 2 +99992 99993 3 +99993 1 3 +2 99991 3 +=================== +Insert time: 5 +99990 99991 1 +1 99993 0 +99993 99990 0 +0 99990 1 +2 3 1 +1 99991 2 +4 99993 3 +99993 1 3 +2 99991 4 +99991 99992 4 +99992 99993 4 +3 2 4 +=================== +Insert time: 6 +99990 99991 1 +1 99993 0 +99993 99990 0 +0 99990 1 +2 3 1 +1 99991 2 +4 99993 3 +99993 1 3 +2 99991 5 +99992 99993 4 +3 2 4 +99991 99992 5 +99992 4 5 +4 2 5 +=================== +Insert time: 7 +99990 99991 1 +1 99993 0 +99993 99990 0 +0 99990 1 +2 3 1 +1 99991 2 +4 99993 3 +99993 1 3 +2 99991 5 +99992 99993 4 +3 2 4 +6 4 5 +4 2 5 +99991 99992 6 +99992 4 6 +5 99991 6 +=================== diff --git a/log_backup.txt b/log_backup.txt new file mode 100644 index 0000000..a97cf8a --- /dev/null +++ b/log_backup.txt @@ -0,0 +1,98 @@ +Insert time: 1 +99990 99991 0 +99991 99992 0 +99992 99993 0 +99993 99990 0 +=================== +Insert time: 2 +99993 99990 0 +99990 99991 1 +0 99990 1 +99991 99992 1 +99992 99993 1 +99993 0 1 +=================== +Insert time: 3 +99993 99990 0 +99990 99991 1 +0 99990 1 +99991 99992 2 +1 99991 2 +99992 99993 2 +99993 0 2 +0 1 2 +=================== +Insert time: 4 +99993 99990 0 +99990 99991 1 +0 99990 1 +1 99991 2 +99991 99992 3 +2 99991 3 +99992 99993 3 +99993 0 3 +0 1 3 +1 2 3 +=================== +Insert time: 5 +99993 99990 0 +99990 99991 1 +0 99990 1 +1 99991 2 +99993 0 3 +0 1 3 +1 2 3 +99991 99992 4 +2 99991 4 +3 2 4 +99992 99993 4 +99993 3 4 +=================== +Insert time: 6 +99993 99990 0 +99990 99991 1 +0 99990 1 +1 99991 2 +99993 0 3 +0 1 3 +1 2 3 +3 2 4 +99992 99993 4 +99993 3 4 +99991 99992 5 +99992 4 5 +2 99991 5 +4 2 5 +=================== +Insert time: 7 +99993 99990 0 +99990 99991 1 +0 99990 1 +1 99991 2 +99993 0 3 +0 1 3 +1 2 3 +3 2 4 +99993 3 4 +2 99991 5 +4 2 5 +99992 99993 6 +99993 4 6 +99991 99992 6 +5 99991 6 +4 5 6 +=================== +OFF +7 5 0 +-0.8 -0.8 0.0 +0.4 -1.2 0.0 +1.2 -0.9 0.0 +1.6 0.1 0.0 +2.5 0.5 0.0 +4.1 0.7 0.0 +5.7 1.8 0.0 +3 0 1 3 +3 1 2 3 +3 3 2 4 +3 4 2 5 +3 4 5 6