21 lines
512 B
C++
21 lines
512 B
C++
|
|
#include <math.h> /* acos(), M_PI */
|
|
|
|
#include "Polygon.h"
|
|
|
|
#define FP_EQUAL(x,y) (fabs((x)-(y)) < 1E-6)
|
|
|
|
bool Polygon::containsPoint(const Vector & v)
|
|
{
|
|
double angle_sum = 0.0;
|
|
for (int i = 0, sz = size(); i < sz; i++)
|
|
{
|
|
Vector v1 = *(*this)[i] - v;
|
|
Vector v2 = *(*this)[(i+1) % sz] - v;
|
|
double cosine = (v1 % v2) / (v1.mag() * v2.mag());
|
|
double angle = acos(cosine);
|
|
angle_sum += angle;
|
|
}
|
|
return FP_EQUAL(angle_sum, 2.0 * M_PI);
|
|
}
|