Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/geode/geometry/distance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1051,15 +1051,15 @@ namespace geode
const Segment3D& segment, const Triangle3D& triangle )
{
const InfiniteLine3D line{ segment };
const auto line_triangle_result =
const auto [_, closest_on_line, closest_on_triangle] =
line_triangle_distance( line, triangle );
const auto& closest_on_line = std::get< 1 >( line_triangle_result );
const auto& closest_on_triangle = std::get< 2 >( line_triangle_result );
const auto closest_on_segment =
point_segment_projection( closest_on_line, segment );
return std::make_tuple(
point_point_distance( closest_on_segment, closest_on_triangle ),
closest_on_segment, closest_on_triangle );
const auto reprojection_on_triangle =
point_triangle_projection( closest_on_segment, triangle );
return std::make_tuple( point_point_distance( closest_on_segment,
reprojection_on_triangle ),
closest_on_segment, reprojection_on_triangle );
}

std::tuple< double, Point3D, Point3D >
Expand Down
19 changes: 19 additions & 0 deletions tests/geometry/test-distance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1045,6 +1045,16 @@ void test_segment_triangle_distance()
const geode::Segment3D seg_bz0{ bplus, b };
const geode::Segment3D seg_bz1{ bminus, b };
const geode::Segment3D seg_hx{ h2, h };
const geode::Point3D t0{ { 481.283958699181, 450.641409484767,
16.0218597413699 } };
const geode::Point3D t1{ { 436.66619673526, 410.956383185562,
-9.33593054802634 } };
const geode::Point3D t2{ { 437.005650057499, 490.326435783972,
-9.33593054802634 } };
const geode::Point3D s0{ { 478.259567983804, 448.24094898319,
14.302289193253 } };
const geode::Point3D s1{ { 478.345179768413, 450.641409484767,
14.3452740537089 } };

double distance;
geode::Point3D closest_point0;
Expand Down Expand Up @@ -1087,6 +1097,15 @@ void test_segment_triangle_distance()
&& closest_point0.inexact_equal( result_t30 )
&& closest_point1.inexact_equal( g ),
"[Test] Wrong result for segment_triangle_distance with seg_hx" );

const geode::Triangle3D real_triangle{ t0, t1, t2 };
const geode::Segment3D real_segment{ s0, s1 };
std::tie( distance, closest_point0, closest_point1 ) =
geode::segment_triangle_distance( real_segment, real_triangle );
OPENGEODE_EXCEPTION( distance <= geode::GLOBAL_EPSILON
&& closest_point0.inexact_equal( s0 )
&& closest_point1.inexact_equal( s0 ),
"[Test] Wrong result for segment_triangle_distance with real_segment" );
}

void test_point_ellipse_distance_2d()
Expand Down