Files
Webcam/include/framework/geometry/sat.h
2026-06-22 11:49:35 +02:00

60 lines
1.1 KiB
C++

/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#ifndef __NSAT__
#define __NSAT__
#include <float.h>
namespace GS {
namespace SAT {
/// SAT overlap test results.
enum Overlap
{
Outside = 0,
Inside, // B inside A
Clipped
};
/// Helper function to test overlap on a given axis.
Overlap TestOverlap(const Vector4 &axis, int ca, const Vector4 *a, int cb, const Vector4 *b)
{
// A interval.
float a_mn = FLT_MAX, a_mx = -FLT_MAX;
for (int n = 0; n < ca; ++n)
{
float d = axis.Dot(a[n]);
if (d < a_mn) a_mn = d;
if (d > a_mx) a_mx = d;
}
// B interval.
float b_mn = FLT_MAX, b_mx = -FLT_MAX;
for (int n = 0; n < cb; ++n)
{
float d = axis.Dot(b[n]);
if (d < b_mn) b_mn = d;
if (d > b_mx) b_mx = d;
}
// Test overlap.
if ((a_mx < b_mn) || (a_mn > b_mx))
return Outside;
if ((b_mn > a_mn) && (b_mx < a_mx))
return Inside;
return Clipped;
}
} // SAT
} // GS
#endif // __NSAT__