Fixed Circle V Circle

pull/300/head
Javidx9 2 years ago
parent a88cd7afb5
commit 6a1105fd3e
  1. 15
      utilities/olcUTIL_Geometry2D.h

@ -61,7 +61,7 @@ namespace olc::utils::geom2d
const double pi = 3.141592653589793238462643383279502884; const double pi = 3.141592653589793238462643383279502884;
// Floating point error margin // Floating point error margin
const double epsilon = 0.0001; const double epsilon = 0.001;
//https://stackoverflow.com/questions/1903954/is-there-a-standard-sign-function-signum-sgn-in-c-c //https://stackoverflow.com/questions/1903954/is-there-a-standard-sign-function-signum-sgn-in-c-c
template <typename T> template <typename T>
@ -228,7 +228,8 @@ namespace olc::utils::geom2d
{ {
std::array<olc::v2d_generic<T>, 3> pos; std::array<olc::v2d_generic<T>, 3> pos;
inline triangle(const olc::v2d_generic<T>& p0 = { T(0), T(0) }, inline triangle(
const olc::v2d_generic<T>& p0 = { T(0), T(0) },
const olc::v2d_generic<T>& p1 = { T(0), T(0) }, const olc::v2d_generic<T>& p1 = { T(0), T(0) },
const olc::v2d_generic<T>& p2 = { T(0), T(0) }) const olc::v2d_generic<T>& p2 = { T(0), T(0) })
: pos{ p0,p1,p2 } : pos{ p0,p1,p2 }
@ -530,6 +531,9 @@ namespace olc::utils::geom2d
{ {
return contains(r, l.start) return contains(r, l.start)
|| contains(r, l.end); || contains(r, l.end);
// TODO: This method is no good, it cant detect lines whose start and end
// points are outside the rectangle
} }
// Check if circle overlaps line segment // Check if circle overlaps line segment
@ -545,6 +549,9 @@ namespace olc::utils::geom2d
inline constexpr bool overlaps(const triangle<T1>& t, const line<T2>& l) inline constexpr bool overlaps(const triangle<T1>& t, const line<T2>& l)
{ {
return overlaps(t, l.start) || overlaps(t, l.end); return overlaps(t, l.start) || overlaps(t, l.end);
// TODO: This method is no good, it cant detect lines whose start and end
// points are outside the triangle
} }
@ -773,7 +780,7 @@ namespace olc::utils::geom2d
template<typename T1, typename T2> template<typename T1, typename T2>
inline constexpr bool contains(const circle<T1>& c1, const circle<T2>& c2) inline constexpr bool contains(const circle<T1>& c1, const circle<T2>& c2)
{ {
return (c1.pos - c2.pos).mag2() <= (c1.radius * c1.radius) - (c2.radius * c2.radius); return (c1.pos - c2.pos).mag2() <= (c1.radius - c2.radius) * (c1.radius - c2.radius);
} }
// Check if triangle contains circle // Check if triangle contains circle
@ -812,7 +819,7 @@ namespace olc::utils::geom2d
template<typename T1, typename T2> template<typename T1, typename T2>
inline constexpr bool overlaps(const circle<T1>& c1, const circle<T2>& c2) inline constexpr bool overlaps(const circle<T1>& c1, const circle<T2>& c2)
{ {
return (c1.pos - c2.pos).mag2() <= (c1.radius * c1.radius) + (c2.radius * c2.radius); return (c1.pos - c2.pos).mag2() <= (c1.radius + c2.radius) * (c1.radius + c2.radius);
} }
// Check if triangle overlaps circle // Check if triangle overlaps circle

Loading…
Cancel
Save