12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #pragma once
- #include <Mathematics/IntrCircle2Circle2.h>
- #include <Mathematics/Arc2.h>
- namespace WwiseGTE
- {
- template <typename Real>
- class FIQuery<Real, Circle2<Real>, Arc2<Real>>
- {
- public:
- struct Result
- {
- bool intersect;
-
-
-
-
-
- int numIntersections;
-
- Vector2<Real> point[2];
-
- Arc2<Real> arc;
- };
- Result operator()(Circle2<Real> const& circle, Arc2<Real> const& arc)
- {
- Result result;
- Circle2<Real> circleOfArc(arc.center, arc.radius);
- FIQuery<Real, Circle2<Real>, Circle2<Real>> ccQuery;
- auto ccResult = ccQuery(circle, circleOfArc);
- if (!ccResult.intersect)
- {
- result.intersect = false;
- result.numIntersections = 0;
- return result;
- }
- if (ccResult.numIntersections == std::numeric_limits<int>::max())
- {
-
- result.intersect = true;
- result.numIntersections = std::numeric_limits<int>::max();
- result.arc = arc;
- return result;
- }
-
- for (int i = 0; i < ccResult.numIntersections; ++i)
- {
- result.numIntersections = 0;
- if (arc.Contains(ccResult.point[i]))
- {
- result.point[result.numIntersections++] = ccResult.point[i];
- result.intersect = true;
- }
- }
- return result;
- }
- };
- }
|