标签:算法
题目描述:
如果在一个二维坐标系中,已知三角形三个点的坐标,那么对于坐标系中的任意一点,如何判断该点是否在三角形内(点在三角形边线上也认为在三角形内)?
假设三角形的三个点的坐标为ABC(逆时针顺序),需要判断点D是否在该三角形内。
解法一
代码如下:
struct point
{
double x, y;
};
double Area(point A, point B, point C)
{
//边长
double a, b, c = 0;
//计算出三角形边长,分别为a,b,c
Computer(A, B, C, a, b, c);
Double p = (a + b + c) / 2;
return sqrt((p - a)*(p - b)*(p - c)*p);//海伦公式
}
//如果D在三角形内,返回true,否则返回false
bool isInTriangle(point A, point B, point C, point D)
{
//Area(A,B,C)函数返回以A,B,C为顶点的三角形的面积
if (Area(A, B, D) + Area(B, C, D) + Area(C, A, D) > Area(A, B, C))
return false;
return true;
}
解法二
struct point
{
double x, y;
};
double Product(point A, point B, point C)
{
return (B.x - A.x)*(C.y - A.y) - (C.x - A.x)*(B.y - A.y);
}
//A,B,C在逆时针方向
//如果D在ABC之外,返回false,否则返回true
//注:此处依赖于A,B,C的位置关系,其位置不能调换
bool isInTriangle(point A, point B, point C, point D)
{
if (Product(A, B, D) >= 0 && Product(B, C, D) >= 0 && Product(C, A, D) >= 0)
return true;
return false;
}
标签:算法
原文地址:http://blog.csdn.net/wangfengfan1/article/details/45604027