根据面积法,如果P在三角形ABC内,那么三角形ABP的面积+三角形BCP的面积+三角形ACP的面积应该等于三角形ABC的面积。算法如下:
#include <iostream>#include <math.h>using namespace std;#define ABS_FLOAT_0 0.0001struct point_float{float x;float y;};
float GetTriangleSquar(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 IsInTriangle( constpoint_float A, constpoint_float B, constpoint_float C, constpoint_float D) { floatSABC, SADB, SBDC, SADC; SABC = GetTriangleSquar(A, B, C); SADB = GetTriangleSquar(A, D, B); SBDC = GetTriangleSquar(B, D, C); SADC = GetTriangleSquar(A, D, C); floatSumSuqar = SADB + SBDC + SADC; if((-ABS_FLOAT_0 < (SABC - SumSuqar)) && ((SABC - SumSuqar) < ABS_FLOAT_0)) { returntrue; } else { returnfalse; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)