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;
|
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
|
#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[19].set(3.5, 1.8, 19);
|
||||||
points[20].set(3.6, 3.1, 20);
|
points[20].set(3.6, 3.1, 20);
|
||||||
|
|
||||||
|
if (duplicated_vertex(points))
|
||||||
|
{
|
||||||
|
std::cerr << "Duplicated vertice detected.\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<triangle> elements;
|
std::vector<triangle> elements;
|
||||||
triangulation(points, 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 << "OFF\n";
|
||||||
std::cout << points.size() << " " << elements.size() << " 0\n";
|
std::cout << points.size() << " " << elements.size() << " 0\n";
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user