OK, i recover that old code I used to detect point inside a polygon with 4 vertex (here named "quad"), the source is C++ because that code was written in c++
If i got some time i'll change it to lua syntax. hope this helps.
Code:
class Quad {
public:
//costruttori
Quad();
Quad(Point p0, Point p1, Point p2, Point p3);
Quad(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
//distruttore
~Quad();
Point p[4]; // array dei vertici
virtual int dot(int x0, int y0, int x1, int y1, int x2, int y2);
virtual bool InsideQuad(int px, int py);
virtual bool InsideQuad(int px, int py, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
private:
};
Quad::Quad(){/* TODO:*/};
Quad::Quad(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
this->p[0].x= x0;
this->p[0].y= y0;
this->p[1].x= x1;
this->p[1].y= y1;
this->p[2].x= x2;
this->p[2].y= y2;
this->p[3].x= x3;
this->p[3].y= y3;
}
Quad::Quad(Point p0, Point p1, Point p2, Point p3) {
this->p[0].x= p0.x;
this->p[0].y= p0.y;
this->p[1].x= p1.x;
this->p[1].y= p1.y;
this->p[2].x= p2.x;
this->p[2].y= p2.y;
this->p[3].x= p3.x;
this->p[3].y= p3.y;
}
Quad::~Quad(){};
int Quad::dot(int x0,int y0,int x1,int y1,int x2,int y2) {
return (x1-x0)*(y2-y1)-(x2-x1)*(y1-y0);
}
bool Quad::InsideQuad(int px, int py) {
return InsideQuad(px, py,
this->p[0].x, this->p[0].y,
this->p[1].x, this->p[1].y,
this->p[2].x, this->p[2].y,
this->p[3].x, this->p[3].y );
}
bool Quad::InsideQuad(int px,int py,int x0,int y0,int x1,int y1,int x2,int y2,int x3,int y3) {
bool bInside= false;
if ( dot(x0,y0,x1,y1,px,py)>0 )
if ( dot(x1,y1,x2,y2,px,py)>0 )
if ( dot(x2,y2,x3,y3,px,py)>0 )
if ( dot(x3,y3,x0,y0,px,py)>0 )
bInside=true;
return bInside;
}