File tree Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -34,4 +34,6 @@ namespace geode
3434{
3535 [[nodiscard]] double opengeode_geometry_api tetrahedron_aspect_ratio (
3636 const Tetrahedron& tetra );
37+ [[nodiscard]] double opengeode_geometry_api
38+ tetrahedron_volume_to_edge_ratio ( const Tetrahedron& tetra );
3739} // namespace geode
Original file line number Diff line number Diff line change 2828#include < limits>
2929
3030#include < geode/geometry/basic_objects/tetrahedron.hpp>
31+ #include < geode/geometry/mensuration.hpp>
3132#include < geode/geometry/vector.hpp>
3233
3334namespace geode
@@ -64,4 +65,26 @@ namespace geode
6465 constant * longest_edge_length * total_area2 / absolute_det;
6566 return aspect_ratio;
6667 }
68+
69+ double tetrahedron_volume_to_edge_ratio ( const Tetrahedron& tetra )
70+ {
71+ const auto signed_volume = geode::tetrahedron_signed_volume ( tetra );
72+ double sq_len{ 0 };
73+ const auto & vertices = tetra.vertices ();
74+ for ( const auto v0 : geode::LRange{ 3 } )
75+ {
76+ const auto & point0 = vertices[v0].get ();
77+ for ( const auto v1 : geode::LRange{ v0, 4 } )
78+ {
79+ const auto & point1 = vertices[v1].get ();
80+ for ( const auto d : geode::LRange{ 3 } )
81+ {
82+ const auto diff = point0.value ( d ) - point1.value ( d );
83+ sq_len += diff * diff;
84+ }
85+ }
86+ }
87+ const auto l_rms = std::sqrt ( sq_len / 6 );
88+ return 6 * std::sqrt ( 2 ) * signed_volume / ( l_rms * l_rms * l_rms );
89+ }
6790} // namespace geode
You can’t perform that action at this time.
0 commit comments