“`” 根据面积法,如果P在三角形ABC内,那么三角形ABP的面积+三角形BCP的面积+三角形ACP的面积应该等于三角形ABC的面积。算法如下:
<pre><code>#include <iostream>#include <math.h>using namespace std;#define ABS_FLOAT_0 0.0001struct point_float{float x;float y;};</code></pre>
/**
<ul>
<li>@brief 计算三角形面积</li>
</ul>
*/
<pre><code> 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; } /** \* @brief 判断给定一点是否在三角形内或边上 */ 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; } }</code></pre>
<pre><code> "“`
Was this helpful?
0 /
0