#include /* 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); }