update src
This commit is contained in:
parent
ba89273e0e
commit
081012221e
61
delaunay.h
61
delaunay.h
@ -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
|
12
demo.cpp
12
demo.cpp
@ -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";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user