Browse Source

SEG: Correct sign in LineDistance

jobs
John Beard 1 year ago
parent
commit
78cb6c1189
  1. 2
      libs/kimath/src/geometry/seg.cpp
  2. 16
      qa/tests/libs/kimath/geometry/test_segment.cpp

2
libs/kimath/src/geometry/seg.cpp

@ -441,7 +441,7 @@ int SEG::LineDistance( const VECTOR2I& aP, bool aDetermineSide ) const
ecoord dist = isqrt( dist_sq );
return static_cast<int>( aDetermineSide ? dist : std::abs( dist ) );
return static_cast<int>( aDetermineSide ? sgn( det ) * dist : std::abs( dist ) );
}

16
qa/tests/libs/kimath/geometry/test_segment.cpp

@ -716,4 +716,20 @@ BOOST_AUTO_TEST_CASE( SegCreatePerpendicular )
}
}
BOOST_AUTO_TEST_CASE( LineDistance )
{
SEG seg( { 0, 0 }, { 10, 0 } );
BOOST_TEST( seg.LineDistance( { 5, 0 } ) == 0 );
BOOST_TEST( seg.LineDistance( { 5, 8 } ) == 8 );
}
BOOST_AUTO_TEST_CASE( LineDistanceSided )
{
SEG seg( { 0, 0 }, { 10, 0 } );
BOOST_TEST( seg.LineDistance( { 5, 8 }, true ) == 8 );
BOOST_TEST( seg.LineDistance( { 5, -8 }, true ) == -8 );
}
BOOST_AUTO_TEST_SUITE_END()
Loading…
Cancel
Save