update src
This commit is contained in:
		
							
								
								
									
										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";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user