update src

This commit is contained in:
张壹 2021-09-15 19:30:19 +08:00
parent ba89273e0e
commit 081012221e
2 changed files with 73 additions and 0 deletions

View File

@ -239,4 +239,65 @@ void triangulation(std::vector<vertex2dc> &in_verts, std::vector<triangle> &out_
return;
}
/**
* @brief Check for duplicated vertex
*
* @param[in] in_verts Input vertexes
*
* @return If there is duplicated vertex
*/
bool duplicated_vertex(const std::vector<vertex2dc> &in_verts)
{
if (in_verts.empty()) return false;
for (int i = 0; i < in_verts.size()-1; ++i)
{
for (int j = i+1; j < in_verts.size(); ++j)
{
if (in_verts[i] == in_verts[j])
{
return true;
}
}
}
return false;
}
/**
* @brief Check to see if the triangulation is fully delaunay
*
* @param[in] in_tris Input triangles
* @param[in] in_verts Input vertexes
*
* @return If the triangulation is fully delaunay
*/
bool fully_delaunay(const std::vector<triangle> &in_tris, const std::vector<vertex2dc> &in_verts)
{
if (in_tris.empty()) return true;
int count;
double dist;
for (int i = 0; i < in_tris.size(); ++i)
{
count = 0;
for (int j = 0; j < in_verts.size(); ++j)
{
dist = (in_tris[i].cx - in_verts[j].x) * (in_tris[i].cx - in_verts[j].x) +
(in_tris[i].cy - in_verts[j].y) * (in_tris[i].cy - in_verts[j].y);
if ((dist - in_tris[i].cr) <= ZERO)
{
count++;
}
}
if (count > 3)
{
return false;
}
}
return true;
}
#endif // _BW_2D_DELAUNAY_H

View File

@ -26,9 +26,21 @@ int main(int argc, char const *argv[])
points[19].set(3.5, 1.8, 19);
points[20].set(3.6, 3.1, 20);
if (duplicated_vertex(points))
{
std::cerr << "Duplicated vertice detected.\n";
return 0;
}
std::vector<triangle> 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";
std::cout << "OFF\n";
std::cout << points.size() << " " << elements.size() << " 0\n";