面试题:判断一点是否再三角形内
思路
假设三角形ABC,一点P,如果Sabp + Sbcp + Sacp == Sabc,则P一定再三角形ABC内
代码
#define ABS_FLOAT0 0.0001
#define EQUAL(A,B) ((-ABS_FLOAT0<(A)-(B))&&((A)-(B))<ABS_FLOAT0)
struct point{
float x,y;
point operator-(point&o){
return {x-o.x,y-o.y};
}
};
//向量叉乘求三角形面积
float get_area(point &a,point &b,point&c){
point ab = b-a,ac = c-a;
return fabs(ab.x*ac.y-ab.y*ac.x)/2.0f;
}
bool isinTriangle(point &a,point &b,point&c,point&p){
return EQUAL(get_area(a,b,p)+get_area(a,c,p)+get_area(b,c,p),get_area(a,b,c));
}