**题目:**判断一点P是否在三角形ABC内部
思路:运用面积法,若点P在三角形ABC内部,则SABC = SAPC + SABP +SBCP
算法如下:
#include <iostream>
#include <math.h>
using namespace std;
define ABS_FLOAT_0 0.001;
struct point_float{
float x;
float y;
};
float GetTriangelSquar(const point_float pt0, const point_float pt1, const point_float pt2){
point_float AB, BC;
AB.x = pt1.x - pt0.x;
AB.y = pt1.y - pt0.y;
BC.x = pt2.x - pt1.x;
BC.y = pt2.y - pt1.y;
return fabs((AB.x*BC.y - AB.y*BC.x))/2.0f;
};
bool IsInTriangel(const point_float A, const point_float B, const point_float C, const point_float D){
SABC = GetTriangelSquar(A, B, C);
SABD = GetTriangelSquar(A, B, D);
SADC = GetTriangelSquar(A, D, C);
SBCD = GetTriangelSquar(B, C, D);
float SumSquar = SABD + SADC + SBCD;
if(((SABC - SumSquar)<ABS_FLOAT_0)&&((SumSquar - SABC) < ABS_FLOAT_0))
{
return true;
}
else {
return false;
}
}
笔记:
- 运用向量叉乘来计算三角形的面积(结果为三角形面积的两倍,所以需要除以2);
- fabs()的作用是取绝对值;
- std定义C++标准程序库标识符;