diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3a78c1d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,82 @@ +{ + "files.associations": { + "__bit_reference": "cpp", + "__config": "cpp", + "__debug": "cpp", + "__errc": "cpp", + "__functional_base": "cpp", + "__hash_table": "cpp", + "__locale": "cpp", + "__mutex_base": "cpp", + "__node_handle": "cpp", + "__nullptr": "cpp", + "__split_buffer": "cpp", + "__string": "cpp", + "__threading_support": "cpp", + "__tuple": "cpp", + "algorithm": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "complex": "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", + "exception": "cpp", + "fstream": "cpp", + "functional": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "iterator": "cpp", + "limits": "cpp", + "locale": "cpp", + "memory": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ostream": "cpp", + "queue": "cpp", + "random": "cpp", + "ratio": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stack": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "thread": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "unordered_map": "cpp", + "utility": "cpp", + "vector": "cpp", + "*.tcc": "cpp", + "memory_resource": "cpp", + "stop_token": "cpp" + } +} \ No newline at end of file diff --git a/demo.cpp b/demo.cpp index 872100a..bb0ac24 100644 --- a/demo.cpp +++ b/demo.cpp @@ -6,10 +6,10 @@ int main(int argc, char const *argv[]) { // read dem grid - std::vector topo(1002001); + std::vector topo(10201); - std::ifstream infile("topo2.txt"); - for (int i = 0; i < 1002001; ++i) + std::ifstream infile("topo.txt"); + for (int i = 0; i < 10201; ++i) { infile >> topo[i]; } @@ -18,10 +18,10 @@ int main(int argc, char const *argv[]) std::vector err_records; std::vector tin_vert; std::vector tin_ele; - dem2tin(topo, 0, 1000, 0, 1000, 1, 1, tin_vert, tin_ele, 10.0, &err_records); + dem2tin(topo, 0, 1000, 0, 1000, 10, 10, tin_vert, tin_ele, 1.0, &err_records); // Write a log file - std::ofstream logfile("topo2_TIN.log"); + std::ofstream logfile("topo_TIN.log"); logfile << "# Insertion Maxi-Error\n"; for (int i = 0; i < err_records.size(); ++i) { @@ -30,7 +30,7 @@ int main(int argc, char const *argv[]) logfile.close(); // Write a Gmsh's .msh file - std::ofstream outfile("topo2_TIN.msh"); + std::ofstream outfile("topo_TIN.msh"); outfile << "$MeshFormat" << std::endl << "2.2 0 8" << std::endl << "$EndMeshFormat "< circum_host; // triangles which circumcircles include the location @@ -144,55 +145,10 @@ struct dem_point } }; -/** - * @brief Utility function of the heap_sort function. - * - * @param a Input vector - * @param[in] i vector's index i - * @param[in] n vector's index n - */ -void update_heap(std::vector &a, int i, int n) +bool compare_dem_point(dem_point *a, dem_point *b) { - int iMax = i, iLeft = 2 * i + 1, iRight = 2 * (i + 1); - - if (iLeft < n && a[iMax]->err > a[iLeft]->err) - { - iMax = iLeft; - } - - if (iRight < n && a[iMax]->err > a[iRight]->err) - { - iMax = iRight; - } - - if (iMax != i) - { - dem_point *tmp = a[iMax]; a[iMax] = a[i]; a[i] = tmp; - update_heap(a, iMax, n); - } - return; -} - -/** - * @brief Heap sort of the dem_point vector in a descending order with respect to the error values - * - * @param a Input vector - */ -void heap_sort(std::vector &a) -{ - int n = a.size(); - for (int i = (n - 1) / 2; i >= 0; i--) - { - update_heap(a, i, n); - } - - dem_point *tmp; - for (int i = n - 1; i > 0; --i) - { - tmp = a[i]; a[i] = a[0]; a[0] = tmp; - update_heap(a, 0, i); - } - return; + if (a->err > b->err) return true; + return false; } // End DEM definition @@ -228,7 +184,7 @@ void dem2tin(const std::vector &dem, double xmin, double xmax, double ym if (dem.size() != xnum*ynum) return; // Prepare the DEM points - dem_point *tmp_dem; + dem_point *tmp_dem = nullptr;; std::vector dem_grid(xnum*ynum); std::vector::iterator d_iter; for (int i = 0; i < ynum; ++i) @@ -240,7 +196,6 @@ void dem2tin(const std::vector &dem, double xmin, double xmax, double ym } vertex2dc *tmp_vert = nullptr; - tmp_vert = new vertex2dc(xmin, ymin, dem_grid[0]->elev, out_verts.size()); // lower left corner out_verts.push_back(tmp_vert); @@ -320,7 +275,8 @@ void dem2tin(const std::vector &dem, double xmin, double xmax, double ym dem_grid[i]->err = fabs(dem_grid[i]->host->interpolate(dem_grid[i]->x, dem_grid[i]->y) - dem_grid[i]->elev); } - heap_sort(dem_grid); + // Sort dem_grid in the desceding order with respect to the error + std::sort(dem_grid.begin(), dem_grid.end(), compare_dem_point); bool removed; edge tmp_edge; @@ -457,7 +413,8 @@ void dem2tin(const std::vector &dem, double xmin, double xmax, double ym delete tmp_tri; tmp_tri = nullptr; } - heap_sort(dem_grid); + // Sort dem_grid in the desceding order with respect to the error + std::sort(dem_grid.begin(), dem_grid.end(), compare_dem_point); } if (err_records != nullptr) diff --git a/topo_TIN.log b/topo_TIN.log index ecda110..55e439c 100644 --- a/topo_TIN.log +++ b/topo_TIN.log @@ -1276,9 +1276,9 @@ 1275 1.87107 1276 1.86875 1277 1.86767 -1278 2.15267 -1279 2.1165 -1280 1.86767 +1278 1.86767 +1279 2.15267 +1280 2.1165 1281 1.86755 1282 1.90845 1283 1.8675 @@ -2086,10 +2086,10 @@ 2085 1.4206 2086 1.1363 2087 1.136 -2088 1.4285 -2089 3.5135 -2090 1.136 -2091 2.002 +2088 2.002 +2089 1.136 +2090 1.4285 +2091 3.5135 2092 1.1352 2093 1.69885 2094 1.1346 diff --git a/topo_TIN.msh b/topo_TIN.msh index 5b66320..470c89e 100644 --- a/topo_TIN.msh +++ b/topo_TIN.msh @@ -1283,10 +1283,10 @@ $Nodes 1278 820 40 19.5174 1279 450 650 108.683 1280 410 660 96.7007 -1281 600 310 141.07 -1282 590 310 132.237 -1283 610 310 148.977 -1284 680 390 143.568 +1281 680 390 143.568 +1282 600 310 141.07 +1283 590 310 132.237 +1284 610 310 148.977 1285 640 250 70.0052 1286 650 250 72.3381 1287 700 400 119.085 @@ -2093,11 +2093,11 @@ $Nodes 2088 350 750 84.5986 2089 330 750 89.6465 2090 240 570 45.0428 -2091 520 470 168.821 -2092 510 470 168.277 -2093 510 460 176.628 -2094 700 420 115.744 -2095 690 420 125.532 +2091 700 420 115.744 +2092 690 420 125.532 +2093 520 470 168.821 +2094 510 470 168.277 +2095 510 460 176.628 2096 910 280 26.9883 2097 900 260 26.7625 2098 750 460 65.73990000000001 @@ -3294,21 +3294,21 @@ $Elements 941 2 0 627 437 1280 942 2 0 520 1055 1280 943 2 0 1055 112 1280 -944 2 0 210 1281 1282 -945 2 0 784 1143 1282 -946 2 0 1143 1145 1282 -947 2 0 156 741 1283 -948 2 0 741 489 1283 -949 2 0 489 300 1283 -950 2 0 300 1281 1283 -951 2 0 511 915 1284 -952 2 0 914 512 1284 -953 2 0 915 914 1284 -954 2 0 512 761 1284 -955 2 0 761 1020 1284 -956 2 0 1020 838 1284 -957 2 0 838 1113 1284 -958 2 0 1113 511 1284 +944 2 0 511 915 1281 +945 2 0 914 512 1281 +946 2 0 915 914 1281 +947 2 0 512 761 1281 +948 2 0 761 1020 1281 +949 2 0 1020 838 1281 +950 2 0 838 1113 1281 +951 2 0 1113 511 1281 +952 2 0 210 1282 1283 +953 2 0 784 1143 1283 +954 2 0 1143 1145 1283 +955 2 0 156 741 1284 +956 2 0 741 489 1284 +957 2 0 489 300 1284 +958 2 0 300 1282 1284 959 2 0 921 272 1285 960 2 0 272 1012 1285 961 2 0 1238 921 1286 @@ -4250,7 +4250,7 @@ $Elements 1897 2 0 1145 1144 1653 1898 2 0 97 1064 1653 1899 2 0 1064 1652 1653 -1900 2 0 1282 1145 1654 +1900 2 0 1283 1145 1654 1901 2 0 1145 1653 1654 1902 2 0 1652 87 1654 1903 2 0 1653 1652 1654 @@ -4986,8 +4986,8 @@ $Elements 2633 2 0 1409 448 1881 2634 2 0 1483 1409 1881 2635 2 0 1666 1483 1881 -2636 2 0 210 1282 1883 -2637 2 0 1282 1654 1883 +2636 2 0 210 1283 1883 +2637 2 0 1283 1654 1883 2638 2 0 87 1173 1883 2639 2 0 1654 87 1883 2640 2 0 1882 210 1883 @@ -5299,9 +5299,9 @@ $Elements 2946 2 0 56 616 1962 2947 2 0 616 928 1962 2948 2 0 928 784 1962 -2949 2 0 784 1282 1962 -2950 2 0 1281 300 1962 -2951 2 0 1282 1281 1962 +2949 2 0 784 1283 1962 +2950 2 0 1282 300 1962 +2951 2 0 1283 1282 1962 2952 2 0 368 794 1963 2953 2 0 794 1230 1963 2954 2 0 906 368 1964 @@ -5446,10 +5446,10 @@ $Elements 3093 2 0 759 830 2001 3094 2 0 2000 758 2001 3095 2 0 1276 759 2001 -3096 2 0 1281 210 2002 -3097 2 0 1283 1281 2002 +3096 2 0 1282 210 2002 +3097 2 0 1284 1282 2002 3098 2 0 376 156 2002 -3099 2 0 156 1283 2002 +3099 2 0 156 1284 2002 3100 2 0 860 1668 2002 3101 2 0 1668 376 2002 3102 2 0 210 1882 2002 @@ -5810,28 +5810,28 @@ $Elements 3457 2 0 1553 1399 2090 3458 2 0 1399 1992 2090 3459 2 0 1992 962 2090 -3460 2 0 47 463 2091 -3461 2 0 463 467 2091 -3462 2 0 467 884 2091 -3463 2 0 884 468 2091 -3464 2 0 1867 1869 2092 -3465 2 0 1869 546 2092 -3466 2 0 468 1867 2092 -3467 2 0 2091 468 2092 -3468 2 0 464 47 2093 -3469 2 0 532 464 2093 -3470 2 0 546 547 2093 -3471 2 0 2092 546 2093 -3472 2 0 47 2091 2093 -3473 2 0 2091 2092 2093 -3474 2 0 564 303 2094 -3475 2 0 249 916 2095 -3476 2 0 916 762 2095 -3477 2 0 303 1796 2095 -3478 2 0 1796 249 2095 -3479 2 0 2094 303 2095 -3480 2 0 762 1112 2095 -3481 2 0 1112 2094 2095 +3460 2 0 564 303 2091 +3461 2 0 249 916 2092 +3462 2 0 916 762 2092 +3463 2 0 303 1796 2092 +3464 2 0 1796 249 2092 +3465 2 0 2091 303 2092 +3466 2 0 762 1112 2092 +3467 2 0 1112 2091 2092 +3468 2 0 47 463 2093 +3469 2 0 463 467 2093 +3470 2 0 467 884 2093 +3471 2 0 884 468 2093 +3472 2 0 1867 1869 2094 +3473 2 0 1869 546 2094 +3474 2 0 468 1867 2094 +3475 2 0 2093 468 2094 +3476 2 0 464 47 2095 +3477 2 0 532 464 2095 +3478 2 0 546 547 2095 +3479 2 0 2094 546 2095 +3480 2 0 47 2093 2095 +3481 2 0 2093 2094 2095 3482 2 0 1535 2051 2096 3483 2 0 399 400 2097 3484 2 0 2096 399 2097 @@ -5986,10 +5986,10 @@ $Elements 3633 2 0 1511 563 2134 3634 2 0 2133 1511 2134 3635 2 0 1112 1873 2135 -3636 2 0 2094 1112 2135 +3636 2 0 2091 1112 2135 3637 2 0 1873 1111 2135 3638 2 0 1111 2133 2135 -3639 2 0 564 2094 2135 +3639 2 0 564 2091 2135 3640 2 0 2133 2134 2135 3641 2 0 2134 564 2135 3642 2 0 1208 84 2136 @@ -6984,8 +6984,8 @@ $Elements 4631 2 0 226 532 2345 4632 2 0 651 226 2345 4633 2 0 1690 651 2345 -4634 2 0 532 2093 2345 -4635 2 0 2093 547 2345 +4634 2 0 532 2095 2345 +4635 2 0 2095 547 2345 $EndElements $NodeData 1 @@ -8276,10 +8276,10 @@ $NodeData 1278 19.5174 1279 108.683 1280 96.7007 -1281 141.07 -1282 132.237 -1283 148.977 -1284 143.568 +1281 143.568 +1282 141.07 +1283 132.237 +1284 148.977 1285 70.0052 1286 72.3381 1287 119.085 @@ -9086,11 +9086,11 @@ $NodeData 2088 84.5986 2089 89.6465 2090 45.0428 -2091 168.821 -2092 168.277 -2093 176.628 -2094 115.744 -2095 125.532 +2091 115.744 +2092 125.532 +2093 168.821 +2094 168.277 +2095 176.628 2096 26.9883 2097 26.7625 2098 65.73990000000001