MCPcopy Create free account
hub / github.com/Geode-solutions/OpenGeode / triangle_angle_based_quality

Function triangle_angle_based_quality

src/geode/geometry/quality.cpp:280–311  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

278
279 template < index_t dimension >
280 double triangle_angle_based_quality( const Triangle< dimension >& triangle )
281 {
282 try
283 {
284 const auto& vertices = triangle.vertices();
285 std::array< double, 3 > sinus;
286 for( const auto v : LRange{ 3 } )
287 {
288 const auto point = vertices[v].get();
289 const auto point_prev = vertices[( v + 2 ) % 3].get();
290 const auto point_next = vertices[( v + 1 ) % 3].get();
291 const auto angle =
292 compute_angle( point, point_prev, point_next );
293 DEBUG( angle );
294 sinus[v] = std::sin( angle );
295 DEBUG( sinus[v] );
296 }
297 const auto denominator = sinus[0] + sinus[1] + sinus[2];
298 if( denominator == 0 )
299 {
300 return 0;
301 }
302 const auto quality =
303 4 * sinus[0] * sinus[1] * sinus[2] / ( denominator );
304 DEBUG( quality );
305 return quality;
306 }
307 catch( ... )
308 {
309 return 0;
310 }
311 }
312
313 template opengeode_geometry_api double triangle_angle_based_quality< 2 >(
314 const Triangle2D& );

Callers

nothing calls this directly

Calls 2

compute_angleFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected