其他分享
首页 > 其他分享> > 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码

给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码

作者:互联网

根据面积法,如果P在三角形ABC内,那么三角形ABP的面积+三角形BCP的面积+三角形ACP的面积应该等于三角形ABC的面积。算法如下:

#include<iostream>
#include<math.h>
using namespace std;
#define ABS_FLOAT_0 0.0001;
struct 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(const point_float A, const point_float B, const point_float C, const point_float D)
{
    float SABC, SADB, SBDC, SADC;
    SABC = GetTriangleSquar(A, B, C);
    SADB = GetTriangleSquar(A, D, B);
    SBDC = GetTriangleSquar(B, D, C);
    SADC = GetTriangleSquar(A, D, C);
    float SumSuqar = SADB + SBDC + SADC;
    if ((-0.0001 < (SABC - SumSuqar)) && ((SABC - SumSuqar) < 0.0001))
    {
        return true;
    }
    else
    {
        return false;
    }
}
int main()
{
    point_float pt0;
    pt0.x = 0;
    pt0.y = 0;
    point_float pt1;
    pt1.x = 0;
    pt1.y = 3;
    point_float pt2;
    pt2.x = 4;
    pt2.y = 0;
    point_float pt3;
    pt3.x = 4;
    pt3.y = 0;
    int a, b;
    a=GetTriangleSquar(pt0, pt1, pt2);
    b=IsInTriangle(pt0, pt1, pt2, pt3);
    cout << a << "  " << b << endl;
    system("pause");
    return 0;
}

 

标签:ABC,const,point,float,给定,手写,pt2,pt1,pt0
来源: https://www.cnblogs.com/277223178dudu/p/11063293.html