Jelajahi Sumber

Fix issue caused by tangent line segment checks
Fixing a bad test case that should've returned false...

Sam Jaffe 6 tahun lalu
induk
melakukan
0e89c5ab87
2 mengubah file dengan 3 tambahan dan 2 penghapusan
  1. 2 1
      math/src/common.cpp
  2. 1 1
      math/test/common_test.cxx

+ 2 - 1
math/src/common.cpp

@@ -87,7 +87,8 @@ namespace math {
   bool intersects(dim2::line const & lhs, dim2::circle const & rhs) {
     dim2::line const orth = lines::orthogonal(lhs, rhs.center);
     vec2 const delta = orth.second - orth.first;
-    return delta.dot(delta) <= std::pow(rhs.radius, 2);
+    float delsq = delta.dot(delta), rsq = std::pow(rhs.radius, 2);
+    return delsq < rsq || (delsq == rsq && contains(lhs, orth.second));
   }
 
   bool intersects(dim2::line const & lhs, dim2::quad const & rhs) {

+ 1 - 1
math/test/common_test.cxx

@@ -203,7 +203,7 @@ TEST(CircleTest, OutsideLineDoesntIntersect) {
 
 TEST(CircleTest, OverlappingQuad) {
   circle const c1{{{0, 0}}, 1};
-  square const sq{{{1, 1}}, 0.5};
+  square const sq{{{0.5, 0.5}}, 0.5};
   EXPECT_TRUE(math::intersects(c1, sq));
 }