
Untitled
By: a guest on
Jun 30th, 2012 | syntax:
C++ | size: 1.11 KB | hits: 17 | expires: Never
int area2(tpoint a,tpoint b,tpoint c)
{
return ((b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y));
}
bool left(tpoint a,tpoint b,tpoint c)
{
return area2(a,b,c)>0;
}
bool lefton(tpoint a,tpoint b,tpoint c)
{
return area2(a,b,c) >= 0;
}
bool collinear(tpoint a,tpoint b,tpoint c)
{
return area2(a,b,c)==0;
}
bool intersectprop(tpoint a,tpoint b,tpoint c,tpoint d)
{
if(collinear(a,b,c) || collinear(a,b,d) || collinear(c,d,a) || collinear(c,d,b)) return false;
else return area2(a,b,c) * area2(a,b,d) <0 && area2(c,d,a) * area2(c,d,b)<0;
}
bool between(tpoint a,tpoint b,tpoint c)
{
//tpoint ba,ca;
if(! collinear(a,b,c)) return false;
if(a.x!=b.x) return ((a.x <= c.x) && (c.x <= b.x)) || ((a.x >= c.x) && (c.x>=b.x));
else
return ((a.y<=c.y) && (c.y <= b.y)) ||
((a.y>=c.y ) && c.y>= b.y);
}
bool intersect(tpoint a,tpoint b,tpoint c,tpoint d)
{
if( intersectprop(a,b,c,d) ) return true;
else if(between(a,b,c) || between(a,b,d)||between(c,d,a) || between(c,d,b)) return true;
else return false;
}